使用 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 任务一样,可以在命令行中通过 --args='<arguments>'bootRun 传递参数(Gradle 4.9 或更高版本)。 例如,要以激活名为 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 项目属性的值设置为 custombootRun 随后会将其作为 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 类似,bootTestRun 也是 BootRun 的实例,但它配置为使用测试源码集输出中的主类,而不是主源码集。 它还使用测试源码集的运行时类路径,而不是主源码集的运行时类路径。 由于 bootTestRunBootRun 的实例,上述所有关于 bootRun 的配置选项同样适用于 bootTestRun