# JavaApplication

API Documentation: | `JavaApplication`

Configuration for a Java application, defining how to assemble the application.

An instance of this type is added as a project extension by the Java application plugin under the name 'application'.

    plugins {
        id 'application'
    }

    application {
      mainClass.set("com.foo.bar.FooBar")
    }

### Properties

Property | Description
`applicationDefaultJvmArgs` | Array of string arguments to pass to the JVM when running the application
`applicationDistribution` | The specification of the contents of the distribution.
`applicationName` | The name of the application.
`executableDir` | Directory to place executables in
`mainClass` | Incubating The name of the application's Java module if it should run as a module.
`mainModule` | Incubating The name of the application's Java module if it should run as a module.

### Methods

No methods

### Script blocks

No script blocks

### Property details

#### ``Iterable`<`String`>` `applicationDefaultJvmArgs`

Array of string arguments to pass to the JVM when running the application

Default value:
  `[]`

#### `CopySpec` `applicationDistribution`

The specification of the contents of the distribution.

Use this `CopySpec` to include extra files/resource in the application distribution.

    plugins {
        id 'application'
    }

    applicationDistribution.from("some/dir") {
      include "*.txt"
    }

Note that the application plugin pre configures this spec to; include the contents of "`src/dist`", copy the application start scripts into the "`bin`" directory, and copy the built jar and its dependencies into the "`lib`" directory.

Default value:
  A copy spec that includes all of the contents of `src/dist`, copies the start scripts into `bin`, and copies the built jar and all dependencies into `lib`

#### `String` `applicationName`

The name of the application.

Default value:
  `project.name`

#### `String` `executableDir`

Directory to place executables in

Default value:
  `"bin"`

#### ``Property`<`String`>` `mainClass`

Note: This property is incubating and may change in a future version of Gradle.

The name of the application's Java module if it should run as a module.

Default value:
  `null`

#### ``Property`<`String`>` `mainModule`

Note: This property is incubating and may change in a future version of Gradle.

The name of the application's Java module if it should run as a module.

Default value:
  `null`