使用 Gradle 运行你的应用程序
要运行你的应用程序而无需先构建归档文件,请使用 bootRun 任务:
$ ./gradlew bootRun
默认情况下,主类会通过在主源集的输出中查找包含 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 plugin,则必须配置其 mainClass 属性,并可用于相同的目的:
- Groovy
- Kotlin
application {
mainClass = 'com.example.ExampleApplication'
}
application {
mainClass.set("com.example.ExampleApplication")
}
向你的应用程序传递参数
与所有 JavaExec 任务一样,当使用 Gradle 4.9 或更高版本时,可以通过命令行使用 --args='<arguments>' 向 bootRun 传递参数。例如,要运行你的应用程序并激活名为 dev 的 profile,可以使用以下命令:
$ ./gradlew bootRun --args='--spring.profiles.active=dev'
详见 JavaExec.setArgsString 的 Javadoc 以获取更多详细信息。
向你的应用传递系统属性
由于 bootRun 是一个标准的 JavaExec 任务,可以通过在构建脚本中指定系统属性,将它们传递给应用程序的 JVM。为了使系统属性的值可配置,可以使用 project property 来设置其值。为了让项目属性变为可选,可以使用 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 类似,bootTestRun 也是 BootRun 的一个实例,但它被配置为使用测试源集(test source set)输出中找到的主类,而不是主源集(main source set)中的主类。它还使用测试源集的运行时类路径(runtime classpath),而不是主源集的运行时类路径。由于 bootTestRun 是 BootRun 的一个实例,因此上面为 bootRun 描述的所有配置选项也可以用于 bootTestRun。