Application 外掛程式有助於建立可執行的 JVM 應用程式。 它可以輕鬆地在開發期間於本機啟動應用程式,並將應用程式封裝為 TAR 和/或 ZIP,包括特定於作業系統的啟動腳本。
應用 Application 外掛程式也會隱含地應用Java 外掛程式。 main
原始碼集實際上是「應用程式」。
應用 Application 外掛程式也會隱含地應用Distribution 外掛程式。 建立了一個 main
發行版本,其中封裝了應用程式,包括程式碼依賴關係和產生的啟動腳本。
建置 JVM 應用程式
若要使用 application 外掛程式,請在您的建置腳本中包含以下內容
plugins {
application
}
plugins {
id 'application'
}
此外掛程式唯一強制性的配置是應用程式主類別(即進入點)的規格。
application {
mainClass = "org.gradle.sample.Main"
}
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
工作,並在發行版本的產生的啟動腳本中考量。
application {
applicationDefaultJvmArgs = listOf("-Dgreeting.language=en")
}
application {
applicationDefaultJvmArgs = ['-Dgreeting.language=en']
}
如果您的應用程式的啟動腳本應位於與 bin
不同的目錄中,您可以配置 executableDir
屬性。
application {
executableDir = "custom_bin_dir"
}
application {
executableDir = 'custom_bin_dir'
}
使用 Java 模組系統建置應用程式
Gradle 支援建置 Java 模組,如 Java Library 外掛程式文件中的相應章節所述。 Java 模組也可以是可執行的,您可以使用 application 外掛程式來執行和封裝此類模組化應用程式。 為此,除了非模組化應用程式之外,您還需要做兩件事。
首先,您需要新增 module-info.java
檔案來描述您的應用程式模組。 有關此主題的更多詳細資訊,請參閱 Java Library 外掛程式文件。
其次,您需要告訴 Gradle 您想要執行的模組名稱以及主類別名稱,如下所示
application {
mainModule = "org.gradle.sample.app" // name defined in module-info.java
mainClass = "org.gradle.sample.Main"
}
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
發行版本是使用以下內容建立的
位置 | 內容 |
---|---|
(根目錄) |
|
|
所有執行階段依賴關係和 main 原始碼集類別檔案。 |
|
啟動腳本(由 |
要新增到發行版本的靜態檔案可以簡單地新增到 src/dist
。 更進階的自訂可以透過配置 main 發行版本公開的 CopySpec 來完成。
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")
}
}
}
}
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 外掛程式將以下工作新增至專案。
run
— JavaExec-
依賴於:
classes
啟動應用程式。
startScripts
— CreateStartScripts-
依賴於:
jar
建立特定於作業系統的腳本,以將專案作為 JVM 應用程式執行。
installDist
— Sync-
依賴於:
jar
,startScripts
將應用程式安裝到指定的目錄中。
distZip
— Zip-
依賴於:
jar
,startScripts
建立完整的發行版本 ZIP 歸檔,包括執行階段函式庫和特定於作業系統的腳本。
distTar
— Tar-
依賴於:
jar
,startScripts
建立完整的發行版本 TAR 歸檔,包括執行階段函式庫和特定於作業系統的腳本。
應用程式擴充功能
Application 外掛程式將擴充功能新增至專案,您可以使用它來配置其行為。 有關擴充功能上可用的屬性的更多資訊,請參閱 JavaApplication DSL 文件。
您可以透過先前顯示的 application {}
區塊配置擴充功能,例如在您的建置腳本中使用以下內容
application {
executableDir = "custom_bin_dir"
}
application {
executableDir = 'custom_bin_dir'
}
啟動腳本的許可證
為應用程式產生的啟動腳本已根據 Apache 2.0 軟體許可證 授權。
慣例屬性 (已棄用)
此外掛程式還會將一些慣例屬性新增至專案,您可以使用這些屬性來配置其行為。 這些是已棄用的,並由上述擴充功能取代。 有關它們的資訊,請參閱 Project DSL 文件。
與擴充功能屬性不同,這些屬性在建置腳本中顯示為頂層專案屬性。 例如,若要變更應用程式名稱,您可以將以下內容新增至您的建置腳本
application.applicationName = "my-app"
application.applicationName = 'my-app'