应用程序插件有助于创建可执行的JVM应用程序. 它使在开发过程中本地启动应用程序变得容易,并且可以将应用程序打包为TAR和/或ZIP,包括特定于操作系统的启动脚本.

应用Application插件也隐式应用Java插件 . main来源集实际上是"应用程序".

应用Application插件还隐式应用Distribution插件 . 创建了一个main发行版,打包了应用程序,包括代码依赖性和生成的启动脚本.

Usage

要使用应用程序插件,请在构建脚本中包括以下内容:

例子1.使用应用程序插件
build.gradle
plugins {
    id 'application'
}
build.gradle.kts
plugins {
    application
}

插件的唯一必需配置是应用程序的主类(即入口点)的规范.

例子2.配置应用程序主类
build.gradle
application {
    mainClassName = 'org.gradle.sample.Main'
}
build.gradle.kts
application {
    mainClassName = "org.gradle.sample.Main"
}

您可以通过执行run任务(类型: JavaExec )来运行应用程序. 这将编译主源集,并使用指定的主类启动一个新的JVM,并将其类(以及所有运行时依赖项)作为类路径. 您可以使用gradle run --debug-jvm在调试模式下启动应用程序(请参阅JavaExec.setDebug(boolean) ).

从Gradle 4.9开始,可以使用--args传递命令行参数. 例如,如果要使用命令行参数foo --bar启动应用程序,则可以使用gradle run --args="foo --bar" (请参阅JavaExec.setArgsString(java.lang.String)) .

如果您的应用程序需要一组特定的JVM设置或系统属性,则可以配置applicationDefaultJvmArgs属性. 这些JVM参数应用于run任务,并在分发的生成的启动脚本中考虑.

示例3.配置默认的JVM设置
build.gradle
application {
    applicationDefaultJvmArgs = ['-Dgreeting.language=en']
}
build.gradle.kts
application {
    applicationDefaultJvmArgs = listOf("-Dgreeting.language=en")
}

如果应用程序的启动脚本应与bin同一目录中,则可以配置executableDir属性.

例子4.为启动脚本配置定制目录
build.gradle
application {
    executableDir = 'custom_bin_dir'
}
build.gradle.kts
application {
    executableDir = "custom_bin_dir"
}

The distribution

可以通过Distribution插件 (自动应用)创建应用程序的发行版 . 创建一个具有以下内容的main发行版:

表1.分发内容
Location Content

(根目录)

src/dist

lib

所有运行时依赖项和主要的源集类文件.

bin

启动脚本(由startScripts任务生成).

要添加到发行版中的静态文件可以简单地添加到src/dist . 通过配置主发行公开的CopySpec,可以完成更高级的自定义.

例子5.在应用程序分发中包括其他任务的输出
build.gradle
task createDocs {
    def docs = file("$buildDir/docs")
    outputs.dir docs
    doLast {
        docs.mkdirs()
        new File(docs, 'readme.txt').write('Read me!')
    }
}

distributions {
    main {
        contents {
            from(createDocs) {
                into 'docs'
            }
        }
    }
}
build.gradle.kts
val createDocs by tasks.registering {
    val docs = file("$buildDir/docs")
    outputs.dir(docs)
    doLast {
        docs.mkdirs()
        File(docs, "readme.txt").writeText("Read me!")
    }
}

distributions {
    main {
        contents {
            from(createDocs) {
                into("docs")
            }
        }
    }
}

通过指定发行版应包含任务的输出文件(请参阅关于 task的更多信息 ),Gradle知道在组装发行版之前必须先调用生成文件的任务,并将为您解决这一问题.

Example: Automatically creating files for distribution

gradle distZip输出
> gradle distZip
> Task :createDocs
> Task :compileJava
> Task :processResources NO-SOURCE
> Task :classes
> Task :jar
> Task :startScripts
> Task :distZip

BUILD SUCCESSFUL in 0s
5 actionable tasks: 5 executed

您可以运行gradle installDistbuild/install/ projectNamebuild/install/ projectName应用程序的映像. 您可以运行gradle distZip创建包含发行版的ZIP, gradle distTar创建应用程序TAR或gradle assemble来构建两者.

Customizing start script generation

该应用程序插件可以立即生成Unix(适用于Linux,macOS等)和Windows启动脚本. 启动脚本使用定义为原始构建和运行时环境一部分的指定设置来启动JVM(例如JAVA_OPTS env var). 默认脚本模板基于用于启动Gradle本身的相同脚本,这些脚本作为Gradle发行版的一部分提供.

启动脚本是完全可定制的. 请参阅CreateStartScripts文档以获取更多详细信息和自定义示例.

Tasks

Application插件将以下任务添加到项目中.

runJavaExec

Depends on: classes

启动应用程序.

startScriptsCreateStartScripts

依赖于取决于: jar

创建特定于OS的脚本以将项目作为JVM应用程序运行.

installDistSync

依赖于取决于: jar, startScripts

将应用程序安装到指定目录.

distZipZip

依赖于取决于: jar, startScripts

创建完整的分发ZIP存档,包括运行时库和特定于操作系统的脚本.

distTarTar

依赖于取决于: jar, startScripts

创建完整的发行版TAR归档文件,包括运行时库和特定于OS的脚本.

Application extension

应用程序插件将扩展添加到项目中,您可以使用它来配置其行为. 有关扩展中可用属性的更多信息,请参见JavaApplication DSL文档.

您可以通过前面显示的application {}块配置扩展,例如,在构建脚本中使用以下命令:

build.gradle
application {
    executableDir = 'custom_bin_dir'
}
build.gradle.kts
application {
    executableDir = "custom_bin_dir"
}

Licensing

与您的应用程序捆绑在一起的Gradle启动脚本已获得Apache 2.0软件许可的许可 . 这不会影响您的应用程序,您可以选择许可该应用程序.

Convention properties (deprecated)

该插件还向项目添加了一些约定属性,您可以使用它们来配置其行为. 这些被上述扩展弃用并被其取代. 请参阅Project DSL文档以获取有关它们的信息.

与扩展属性不同,这些属性在构建脚本中显示为顶级项目属性. 例如,要更改应用程序名称,您可以将以下内容添加到构建脚本中:

build.gradle
applicationName = 'my-app'
build.gradle.kts
application.applicationName = "my-app"