# The Application Plugin

The Application plugin facilitates creating an executable JVM application. It makes it easy to start the application locally during development, and to package the application as a TAR and/or ZIP including operating system specific start scripts.

Applying the Application plugin also implicitly applies the Java plugin. The `main` source set is effectively the “application”.

Applying the Application plugin also implicitly applies the Distribution plugin. A `main` distribution is created that packages up the application, including code dependencies and generated start scripts.

## Usage

To use the application plugin, include the following in your build script:

The only mandatory configuration for the plugin is the specification of the main class (i.e. entry point) of the application.

You can run the application by executing the `run` task (type: ). This will compile the main source set, and launch a new JVM with its classes (along with all runtime dependencies) as the classpath and using the specified main class. You can launch the application in debug mode with `gradle run --debug-jvm` (see ).

If your application requires a specific set of JVM settings or system properties, you can configure the `applicationDefaultJvmArgs` property. These JVM arguments are applied to the `run` task and also considered in the generated start scripts of your distribution.

### The distribution

A distribution of the application can be created, by way of the Distribution plugin (which is automatically applied). A `main` distribution is created with the following content:

### Distribution content

Location | Content
(root dir) | `src/dist`
`lib` | All runtime dependencies and main source set class files.
`bin` | Start scripts (generated by `createStartScripts` task).

Static files to be added to the distribution can be simply added to `src/dist`. More advanced customization can be done by configuring the exposed by the main distribution.

By specifying that the distribution should include the task's output files (see sec:task_inputs_outputs), Gradle knows that the task that produces the files must be invoked before the distribution can be assembled and will take care of this for you.

You can run `gradle installDist` to create an image of the application in `build/install/`projectName``. You can run `gradle distZip` to create a ZIP containing the distribution, `gradle distTar` to create an application TAR or `gradle assemble` to build both.

### Customizing start script generation

The application plugin can generate Unix (suitable for Linux, Mac OS X etc.) and Windows start scripts out of the box. The start scripts launch a JVM with the specified settings defined as part of the original build and runtime environment (e.g. `JAVA_OPTS` env var). The default script templates are based on the same scripts used to launch Gradle itself, that ship as part of a Gradle distribution.

The start scripts are completely customizable. Please refer to the documentation of for more details and customization examples.

## Tasks

The Application plugin adds the following tasks to the project.

## Application plugin - tasks

Task name | Depends on | Type | Description
`run` | `classes` |  | Starts the application.
`startScripts` | `jar` |  | Creates OS specific scripts to run the project as a JVM application.
`installDist` | `jar`, `startScripts` |  | Installs the application into a specified directory.
`distZip` | `jar`, `startScripts` |  | Creates a full distribution ZIP archive including runtime libraries and OS specific scripts.
`distTar` | `jar`, `startScripts` |  | Creates a full distribution TAR archive including runtime libraries and OS specific scripts.

## Convention properties

The application plugin adds some properties to the project, which you can use to configure its behaviour. See the class in the API documentation.