使用 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"])
}
這使得它們可以在執行中的應用中重新載入,這在開發時會很有幫助。