org.gradle.tooling

## Interface BuildLauncher

- All Superinterfaces:
    LongRunningOperation

      public interface BuildLauncher
      extends LongRunningOperation

  A `BuildLauncher` allows you to configure and execute a Gradle build.

  Instances of `BuildLauncher` are not thread-safe. You use a `BuildLauncher` as follows:

  - Create an instance of `BuildLauncher` by calling `ProjectConnection.newBuild()`.
  - Configure the launcher as appropriate.
  - Call either `run()` or `run(ResultHandler)` to execute the build.
  - Optionally, you can reuse the launcher to launch additional builds.
  Example:

       ProjectConnection connection = GradleConnector.newConnector()
          .forProjectDirectory(new File("someFolder"))
          .connect();

       try {
          BuildLauncher build = connection.newBuild();

          //select tasks to run:
          build.forTasks("clean", "test");

          //include some build arguments:
          build.withArguments("--no-search-upward", "-i", "--project-dir", "someProjectDir");

          //configure the standard input:
          build.setStandardInput(new ByteArrayInputStream("consume this!".getBytes()));

          //in case you want the build to use java different than default:
          build.setJavaHome(new File("/path/to/java"));

          //if your build needs crazy amounts of memory:
          build.setJvmArguments("-Xmx2048m", "-XX:MaxPermSize=512m");

          //if you want to listen to the progress events:
          ProgressListener listener = null; // use your implementation
          build.addProgressListener(listener);

          //kick the build off:
          build.run();
       } finally {
          connection.close();
       }

  Since:
    1.0-milestone-3

- - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `BuildLauncher` | `addProgressListener(ProgressListener listener)` Adds a progress listener which will receive progress events as the operation runs.
    `BuildLauncher` | `forLaunchables(Iterable<? extends Launchable> launchables)` Sets the launchables to execute.
    `BuildLauncher` | `forLaunchables(Launchable... launchables)` Sets the launchables to execute.
    `BuildLauncher` | `forTasks(Iterable<? extends Task> tasks)` Sets the tasks to be executed.
    `BuildLauncher` | `forTasks(String... tasks)` Sets the tasks to be executed.
    `BuildLauncher` | `forTasks(Task... tasks)` Sets the tasks to be executed.
    `void` | `run()` Executes the build, blocking until it is complete.
    `void` | `run(ResultHandler<? super Void> handler)` Launches the build.
    `BuildLauncher` | `setJavaHome(File javaHome)` Specifies the Java home directory to use for this operation.
    `BuildLauncher` | `setJvmArguments(String... jvmArguments)` Specifies the Java VM arguments to use for this operation.
    `BuildLauncher` | `setStandardError(OutputStream outputStream)` Sets the `OutputStream` which should receive standard error logging generated while running the operation.
    `BuildLauncher` | `setStandardInput(InputStream inputStream)` Sets the `InputStream` that will be used as standard input for this operation.
    `BuildLauncher` | `setStandardOutput(OutputStream outputStream)` Sets the `OutputStream` which should receive standard output logging generated while running the operation.
    `BuildLauncher` | `withArguments(String... arguments)` Specify the command line build arguments.

    - ### Methods inherited from interface org.gradle.tooling.LongRunningOperation

      `withCancellationToken`

- - ### Method Detail

    - #### forTasks

          BuildLauncher forTasks(String... tasks)

      Sets the tasks to be executed. If no tasks are specified, the project's default tasks are executed.
      Parameters:
        `tasks` - The paths of the tasks to be executed. Relative paths are evaluated relative to the project for which this launcher was created.
      Returns:
        this
      Since:
        1.0-milestone-3

    - #### forTasks

          BuildLauncher forTasks(Task... tasks)

      Sets the tasks to be executed. If no tasks are specified, the project's default tasks are executed.

      Note that the supplied tasks do not necessarily need to belong to the project which this launcher was created for.

      Parameters:
        `tasks` - The tasks to be executed.
      Returns:
        this
      Since:
        1.0-milestone-3

    - #### forTasks

          BuildLauncher forTasks(Iterable<? extends Task> tasks)

      Sets the tasks to be executed. If no tasks are specified, the project's default tasks are executed.

      Note that the supplied tasks do not necessarily need to belong to the project which this launcher was created for.

      Parameters:
        `tasks` - The tasks to be executed.
      Returns:
        this
      Since:
        1.0-milestone-3

    - #### forLaunchables

          @Incubating
          BuildLauncher forLaunchables(Launchable... launchables)

      Sets the launchables to execute. If no entries are specified, the project's default tasks are executed.
      Parameters:
        `launchables` - The launchables for this build.
      Returns:
        this
      Since:
        1.12

    - #### forLaunchables

          @Incubating
          BuildLauncher forLaunchables(Iterable<? extends Launchable> launchables)

      Sets the launchables to execute. If no entries are specified, the project's default tasks are executed.
      Parameters:
        `launchables` - The launchables for this build.
      Returns:
        this
      Since:
        1.12

    - #### withArguments

          BuildLauncher withArguments(String... arguments)

      Specify the command line build arguments. Useful mostly for running tasks via `BuildLauncher`.

      Be aware that not all of the Gradle command line options are supported! Only the build arguments that configure the build execution are supported. They are modelled in the Gradle API via `StartParameter`. Examples of supported build arguments: '--info', '-u', '-p'. The command line instructions that are actually separate commands (like '-?' and '-v') are not supported. Some other instructions like '--daemon' are also not supported - the tooling API always runs with the daemon.

      If an unknown or unsupported command line option is specified, `UnsupportedBuildArgumentException` will be thrown at the time the operation is executed via `run()` or `ModelBuilder.get()`.

      For the list of all Gradle command line options please refer to the user guide or take a look at the output of the 'gradle -?' command. Majority of arguments modeled by `StartParameter` are supported.

      The arguments can potentially override some other settings you have configured. For example, the project directory or Gradle user home directory that are configured in the `GradleConnector`. Also, the task names configured by `forTasks(String...)` can be overridden if you happen to specify other tasks via the build arguments.

      See the example in the docs for `BuildLauncher`

      Specified by:
        `withArguments` in interface `LongRunningOperation`
      Parameters:
        `arguments` - Gradle command line arguments
      Returns:
        this
      Since:
        1.0

    - #### setStandardOutput

          BuildLauncher setStandardOutput(OutputStream outputStream)

      Sets the `OutputStream` which should receive standard output logging generated while running the operation. The default is to discard the output.
      Specified by:
        `setStandardOutput` in interface `LongRunningOperation`
      Parameters:
        `outputStream` - The output stream. The system default character encoding will be used to encode characters written to this stream.
      Returns:
        this
      Since:
        1.0-milestone-3

    - #### setStandardError

          BuildLauncher setStandardError(OutputStream outputStream)

      Sets the `OutputStream` which should receive standard error logging generated while running the operation. The default is to discard the output.
      Specified by:
        `setStandardError` in interface `LongRunningOperation`
      Parameters:
        `outputStream` - The output stream. The system default character encoding will be used to encode characters written to this stream.
      Returns:
        this
      Since:
        1.0-milestone-3

    - #### setStandardInput

          BuildLauncher setStandardInput(InputStream inputStream)

      Sets the `InputStream` that will be used as standard input for this operation. Defaults to an empty input stream.

      If the target Gradle version does not support it the long running operation will fail with `UnsupportedOperationConfigurationException` when the operation is started.

      Specified by:
        `setStandardInput` in interface `LongRunningOperation`
      Parameters:
        `inputStream` - The input stream
      Returns:
        this
      Since:
        1.0-milestone-7

    - #### setJavaHome

          BuildLauncher setJavaHome(File javaHome)

      Specifies the Java home directory to use for this operation.

      If the target Gradle version does not support it the long running operation will fail eagerly with `UnsupportedOperationConfigurationException` when the operation is started.

      `BuildEnvironment` model contains information such as Java or Gradle environment. If you want to get hold of this information you can ask tooling API to build this model.

      If not configured or null passed the sensible default will be used.

      Specified by:
        `setJavaHome` in interface `LongRunningOperation`
      Parameters:
        `javaHome` - to use for the Gradle process
      Returns:
        this
      Since:
        1.0-milestone-8

    - #### setJvmArguments

          BuildLauncher setJvmArguments(String... jvmArguments)

      Specifies the Java VM arguments to use for this operation.

      If the target Gradle version does not support it the long running operation will fail eagerly with `UnsupportedOperationConfigurationException` when the operation is started.

      `BuildEnvironment` model contains information such as Java or Gradle environment. If you want to get hold of this information you can ask tooling API to build this model.

      If not configured, null an empty array passed then the reasonable default will be used.

      Specified by:
        `setJvmArguments` in interface `LongRunningOperation`
      Parameters:
        `jvmArguments` - to use for the Gradle process
      Returns:
        this
      Since:
        1.0-milestone-9

    - #### addProgressListener

          BuildLauncher addProgressListener(ProgressListener listener)

      Adds a progress listener which will receive progress events as the operation runs.
      Specified by:
        `addProgressListener` in interface `LongRunningOperation`
      Parameters:
        `listener` - The listener
      Returns:
        this
      Since:
        1.0-milestone-3

    - #### run

          void run()
                   throws GradleConnectionException,
                          IllegalStateException

      Executes the build, blocking until it is complete.
      Throws:
        `UnsupportedVersionException` - When the target Gradle version does not support build execution.
        `UnsupportedOperationConfigurationException` - When the target Gradle version does not support some requested configuration option such as `setStandardInput(java.io.InputStream)`, `setJavaHome(java.io.File)`, `setJvmArguments(String...)`.
        `UnsupportedBuildArgumentException` - When there is a problem with build arguments provided by `withArguments(String...)`.
        `BuildException` - On some failure executing the Gradle build.
        `BuildCancelledException` - When the operation was cancelled before it completed successfully.
        `GradleConnectionException` - On some other failure using the connection.
        `IllegalStateException` - When the connection has been closed or is closing.
      Since:
        1.0-milestone-3

    - #### run

          void run(ResultHandler<? super Void> handler)
                   throws IllegalStateException

      Launches the build. This method returns immediately, and the result is later passed to the given handler.

      If the operation fails, the handler's `ResultHandler.onFailure(GradleConnectionException)` method is called with the appropriate exception. See `run()` for a description of the various exceptions that the operation may fail with.

      Parameters:
        `handler` - The handler to supply the result to.
      Throws:
        `IllegalStateException` - When the connection has been closed or is closing.
      Since:
        1.0-milestone-3