使用 Gradle 執行你的應用

要不先構建歸檔檔案直接執行你的應用,請使用 bootRun 任務

$ ./gradlew bootRun

bootRun 任務是 BootRun 的一個例項,它是 JavaExec 的子類。因此,Gradle 中執行 Java 程序的所有常規配置選項都對你可用。該任務會自動配置為使用主源集的執行時 classpath。

預設情況下,主類將透過在主源集的輸出中查詢具有 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='' 將引數傳遞給 bootRun。例如,要以名為 dev 的 profile 啟用狀態執行你的應用,可以使用以下命令

$ ./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,它將自動監控應用的 classpath 以進行更改。請注意,修改後的檔案需要重新編譯才能更新 classpath,從而觸發 devtools 的重新載入。有關使用 devtools 的更多詳細資訊,請參閱參考文件的這一節

另外,你可以配置 bootRun,以便從原始碼位置載入應用的靜態資源

  • Groovy

  • Kotlin

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

這使得它們可以在執行中的應用中重新載入,這在開發時會很有幫助。

使用測試主類

除了 bootRun 之外,還註冊了一個 bootTestRun 任務。與 bootRun 一樣,bootTestRunBootRun 的一個例項,但它配置為使用測試源集輸出中的主類,而不是主源集中的主類。它還使用測試源集的執行時 classpath,而不是主源集的執行時 classpath。由於 bootTestRunBootRun 的一個例項,因此上面描述的所有針對 bootRun 的配置選項也可以用於 bootTestRun