使用 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