在Gradle中定义bootRun任务的另一种方法不起作用

时间:2019-10-02 18:55:15

标签: gradle groovy

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

现在,我想对某些提供的Spring Boot任务执行相同的操作,即:bootRunbootStartScripts,但是Gradle找不到它。

我知道这很愚蠢,仅使用bootRunbootStartScripts就可以逃脱,但是我想理解为什么不能用这种方式配置/定义它们。

1 个答案:

答案 0 :(得分:1)

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

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

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

tasks.withType(CreateStartScripts) {
    // configure
}

任务bootRun的类型为org.springframework.boot.gradle.tasks.run.BootRun,由Spring Boot插件提供。因此,您需要指定全名:

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