首页 > 解决方案 > 在 Gradle 中定义 bootRun 任务的替代方法不起作用

问题描述

我通常在Gradle(使用Groovy)like中定义任务tasks.withType(Type);例如:tasks.withType(JavaCompile)tasks.withType(Test)等。

现在,我想对一些提供的Spring Boot任务做同样的事情,即:bootRunbootStartScripts,但Gradle找不到它。

bootRun我知道这很愚蠢,我可以通过使用and逃脱bootStartScripts,但我想了解为什么不能以这种方式配置/定义这些。

标签: gradlegroovy

解决方案


我猜你的定义configure,因为withType只能用于配置现有任务。它需要一个任务类型(一个类)和一个可用于配置该类型的所有可用任务的闭包。这需要考虑,因为一个项目可能包含多个相同类型的任务,这些任务实际上应该做完全不同的事情。是配置所有这些任务还是只配置一个特定的任务很重要!

要将任务类型传递给方法withType,您需要知道实现任务类型的类的名称。此名称不一定与实际任务的名称相关。对于 Gradle Java 插件的任务testcompileJava这些类是org.gradle.api.tasks.testing.Testorg.gradle.api.tasks.compile.JavaCompile。由于这些类是由 Gradle 提供的,因此它们会自动导入,并且可以通过它们的简单名称TestJavaCompile. 但是Spring Boot Plugin是第三方插件,所以类需要引用全名。

您问题中的任务bootStartScripts是类型CreateStartScript,由 Gradle 提供。因此可以这样配置:

tasks.withType(CreateStartScripts) {
    // configure
}

任务bootRun类型org.springframework.boot.gradle.tasks.run.BootRun为 ,由 Spring Boot Plugin 提供。所以你需要指定全名:

tasks.withType(org.springframework.boot.gradle.tasks.run.BootRun) {
    // configure
}

推荐阅读