我通常在Gradle
(使用Groovy
)中定义任务,例如tasks.withType(Type)
;例如:tasks.withType(JavaCompile)
,tasks.withType(Test)
等
现在,我想对某些提供的Spring Boot
任务执行相同的操作,即:bootRun
和bootStartScripts
,但是Gradle
找不到它。
我知道这很愚蠢,仅使用bootRun
和bootStartScripts
就可以逃脱,但是我想理解为什么不能用这种方式配置/定义它们。
答案 0 :(得分:1)
我猜用 define 的意思是 configure ,因为withType
仅可用于配置现有任务。它具有一个任务类型(一个类)和一个闭包,可用于配置该类型的所有可用任务。需要考虑到这一点,因为一个项目可能包含实际上应该做完全不同的事情的相同类型的多个任务。无论是配置所有这些任务还是仅配置一个特定任务,都很重要!
要将任务类型传递给方法withType
,您需要知道实现任务类型的类的名称。此名称不一定与实际任务的名称相关。对于Gradle Java插件的任务test
和compileJava
,这些类是org.gradle.api.tasks.testing.Test
和org.gradle.api.tasks.compile.JavaCompile
。由于这些类由Gradle提供,因此它们会自动导入,并可以通过其简单名称Test
和JavaCompile
进行引用。但是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
}