使用 Gradle 執行應用程式

若要執行您的應用程式而無需先建置歸檔,請使用 bootRun 任務

$ ./gradlew bootRun

bootRun 任務是 BootRun 的實例,它是 JavaExec 子類別。因此,Gradle 中執行 Java 程序的常用組態選項都適用於您。此任務會自動組態為使用主要來源集的執行時期類別路徑。

預設情況下,主要類別將透過在主要來源集的輸出中尋找具有 public static void main(String[]) 方法的類別來自動組態。

主要類別也可以使用任務的 main 屬性明確組態

  • Groovy

  • Kotlin

tasks.named("bootRun") {
	mainClass = 'com.example.ExampleApplication'
}
tasks.named<BootRun>("bootRun") {
	mainClass.set("com.example.ExampleApplication")
}

或者,主要類別名稱可以在專案範圍內使用 Spring Boot DSL 的 mainClass 屬性進行組態

  • Groovy

  • Kotlin

springBoot {
	mainClass = 'com.example.ExampleApplication'
}
springBoot {
	mainClass.set("com.example.ExampleApplication")
}

預設情況下,bootRun 將組態 JVM 以最佳化其啟動,以便在開發期間更快啟動。可以使用 optimizedLaunch 屬性停用此行為,如下例所示

  • Groovy

  • Kotlin

tasks.named("bootRun") {
	optimizedLaunch = false
}
tasks.named<BootRun>("bootRun") {
	optimizedLaunch.set(false)
}

如果已套用 application 外掛程式,則必須組態其 mainClass 屬性,並且可以將其用於相同的目的

  • Groovy

  • Kotlin

application {
	mainClass = 'com.example.ExampleApplication'
}
application {
	mainClass.set("com.example.ExampleApplication")
}

傳遞引數至您的應用程式

與所有 JavaExec 任務一樣,當使用 Gradle 4.9 或更高版本時,可以使用 --args='<arguments>' 從命令列將引數傳遞到 bootRun。例如,若要使用名為 dev 的設定檔執行您的應用程式,可以使用以下命令

$ ./gradlew bootRun --args='--spring.profiles.active=dev'

請參閱 JavaExec.setArgsString 的 javadoc 以取得更多詳細資訊。

傳遞系統屬性至您的應用程式

由於 bootRun 是標準的 JavaExec 任務,因此可以透過在建置腳本中指定系統屬性來將其傳遞到應用程式的 JVM。若要使系統屬性的值可組態,請使用專案屬性設定其值。若要允許專案屬性為選用,請使用 findProperty 參考它。這樣做也允許使用 ?: Elvis 運算符提供預設值,如下例所示

  • Groovy

  • Kotlin

tasks.named("bootRun") {
	systemProperty 'com.example.property', findProperty('example') ?: 'default'
}
tasks.named<BootRun>("bootRun") {
	systemProperty("com.example.property", findProperty("example") ?: "default")
}

前面的範例將 com.example.property 系統屬性設定為 example 專案屬性的值。如果未設定 example 專案屬性,則系統屬性的值將為 default

Gradle 允許以多種方式設定專案屬性,包括在命令列中使用 -P 旗標,如下例所示

$ ./gradlew bootRun -Pexample=custom

前面的範例將 example 專案屬性的值設定為 custom。然後 bootRun 將使用此值作為 com.example.property 系統屬性的值。

重新載入資源

如果已將 devtools 新增至您的專案,它將自動監控應用程式的類別路徑以進行變更。請注意,修改後的文件需要重新編譯類別路徑才能更新,以便使用 devtools 觸發重新載入。有關使用 devtools 的更多詳細資訊,請參閱參考文件的此章節

或者,您可以組態 bootRun,以便從來源位置載入應用程式的靜態資源

  • Groovy

  • Kotlin

tasks.named("bootRun") {
	sourceResources sourceSets.main
}
tasks.named<BootRun>("bootRun") {
	sourceResources(sourceSets["main"])
}

這使其在即時應用程式中可重新載入,這在開發時可能很有用。

使用測試主要類別

除了 bootRun 之外,還註冊了 bootTestRun 任務。與 bootRun 類似,bootTestRunBootRun 的實例,但它組態為使用在測試來源集的輸出中找到的主要類別,而不是主要來源集。它也使用測試來源集的執行時期類別路徑,而不是主要來源集的執行時期類別路徑。由於 bootTestRunBootRun 的實例,因此上述針對 bootRun 描述的所有組態選項也可用於 bootTestRun