Application 外掛程式有助於建立可執行的 JVM 應用程式。 它可以輕鬆地在開發期間於本機啟動應用程式,並將應用程式封裝為 TAR 和/或 ZIP,包括特定於作業系統的啟動腳本。

應用 Application 外掛程式也會隱含地應用Java 外掛程式main 原始碼集實際上是「應用程式」。

應用 Application 外掛程式也會隱含地應用Distribution 外掛程式。 建立了一個 main 發行版本,其中封裝了應用程式,包括程式碼依賴關係和產生的啟動腳本。

建置 JVM 應用程式

若要使用 application 外掛程式,請在您的建置腳本中包含以下內容

build.gradle.kts
plugins {
    application
}
build.gradle
plugins {
    id 'application'
}

此外掛程式唯一強制性的配置是應用程式主類別(即進入點)的規格。

build.gradle.kts
application {
    mainClass = "org.gradle.sample.Main"
}
build.gradle
application {
    mainClass = 'org.gradle.sample.Main'
}

您可以透過執行 run 工作 (類型:JavaExec) 來執行應用程式。 這將編譯 main 原始碼集,並啟動新的 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 工作,並在發行版本的產生的啟動腳本中考量。

build.gradle.kts
application {
    applicationDefaultJvmArgs = listOf("-Dgreeting.language=en")
}
build.gradle
application {
    applicationDefaultJvmArgs = ['-Dgreeting.language=en']
}

如果您的應用程式的啟動腳本應位於與 bin 不同的目錄中,您可以配置 executableDir 屬性。

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

使用 Java 模組系統建置應用程式

Gradle 支援建置 Java 模組,如 Java Library 外掛程式文件中的相應章節所述。 Java 模組也可以是可執行的,您可以使用 application 外掛程式來執行和封裝此類模組化應用程式。 為此,除了非模組化應用程式之外,您還需要做兩件事。

首先,您需要新增 module-info.java 檔案來描述您的應用程式模組。 有關此主題的更多詳細資訊,請參閱 Java Library 外掛程式文件

其次,您需要告訴 Gradle 您想要執行的模組名稱以及主類別名稱,如下所示

build.gradle.kts
application {
    mainModule = "org.gradle.sample.app" // name defined in module-info.java
    mainClass = "org.gradle.sample.Main"
}
build.gradle
application {
    mainModule = 'org.gradle.sample.app' // name defined in module-info.java
    mainClass = 'org.gradle.sample.Main'
}

就這樣。 如果您執行應用程式,透過執行 run 工作或透過 產生的啟動腳本,它將作為模組執行,並在執行階段遵守模組邊界。 例如,從另一個模組對內部套件進行反射存取可能會失敗。

配置的主類別也會烘焙到應用程式 Jar 的 module-info.class 檔案中。 如果您使用 java 命令直接執行模組化應用程式,則僅提供模組名稱就足夠了。

您也可以查看 現成的範例,其中包含作為多專案一部分的模組化應用程式。

建置發行版本

可以透過 Distribution 外掛程式 (自動應用) 建立應用程式的發行版本。 main 發行版本是使用以下內容建立的

表 1. 發行版本內容
位置 內容

(根目錄)

src/dist

lib

所有執行階段依賴關係和 main 原始碼集類別檔案。

bin

啟動腳本(由 startScripts 工作產生)。

要新增到發行版本的靜態檔案可以簡單地新增到 src/dist。 更進階的自訂可以透過配置 main 發行版本公開的 CopySpec 來完成。

build.gradle.kts
val createDocs by tasks.registering {
    val docs = layout.buildDirectory.dir("docs")
    outputs.dir(docs)
    doLast {
        docs.get().asFile.mkdirs()
        docs.get().file("readme.txt").asFile.writeText("Read me!")
    }
}

distributions {
    main {
        contents {
            from(createDocs) {
                into("docs")
            }
        }
    }
}
build.gradle
tasks.register('createDocs') {
    def docs = layout.buildDirectory.dir('docs')
    outputs.dir docs
    doLast {
        docs.get().asFile.mkdirs()
        docs.get().file('readme.txt').asFile.write('Read me!')
    }
}

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

透過指定發行版本應包含工作的輸出檔案(請參閱 增量建置),Gradle 知道必須在組裝發行版本之前調用產生檔案的工作,並且會為您處理此問題。

您可以執行 gradle installDist 以在 build/install/projectName 中建立應用程式的映像。 您可以執行 gradle distZip 以建立包含發行版本的 ZIP,執行 gradle distTar 以建立應用程式 TAR,或執行 gradle assemble 以同時建置兩者。

自訂啟動腳本產生

application 外掛程式可以開箱即用地產生 Unix(適用於 Linux、macOS 等)和 Windows 啟動腳本。 啟動腳本啟動 JVM,其設定定義為原始建置和執行階段環境的一部分 (例如 JAVA_OPTS 環境變數)。 預設腳本範本基於用於啟動 Gradle 本身的相同腳本,這些腳本作為 Gradle 發行版本的一部分發布。

啟動腳本是完全可自訂的。 有關更多詳細資訊和自訂範例,請參閱 CreateStartScripts 的文件。

工作

Application 外掛程式將以下工作新增至專案。

runJavaExec

依賴於classes

啟動應用程式。

startScriptsCreateStartScripts

依賴於jar

建立特定於作業系統的腳本,以將專案作為 JVM 應用程式執行。

installDistSync

依賴於jar, startScripts

將應用程式安裝到指定的目錄中。

distZipZip

依賴於jar, startScripts

建立完整的發行版本 ZIP 歸檔,包括執行階段函式庫和特定於作業系統的腳本。

distTarTar

依賴於jar, startScripts

建立完整的發行版本 TAR 歸檔,包括執行階段函式庫和特定於作業系統的腳本。

應用程式擴充功能

Application 外掛程式將擴充功能新增至專案,您可以使用它來配置其行為。 有關擴充功能上可用的屬性的更多資訊,請參閱 JavaApplication DSL 文件。

您可以透過先前顯示的 application {} 區塊配置擴充功能,例如在您的建置腳本中使用以下內容

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

啟動腳本的許可證

為應用程式產生的啟動腳本已根據 Apache 2.0 軟體許可證 授權。

慣例屬性 (已棄用)

此外掛程式還會將一些慣例屬性新增至專案,您可以使用這些屬性來配置其行為。 這些是已棄用的,並由上述擴充功能取代。 有關它們的資訊,請參閱 Project DSL 文件。

與擴充功能屬性不同,這些屬性在建置腳本中顯示為頂層專案屬性。 例如,若要變更應用程式名稱,您可以將以下內容新增至您的建置腳本

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