gradle: 当插件任务“依赖于”另一个插件任务时失败
gradle: failure when plugin task `dependsOn` another plugin task
测试 gradle 作为 maven 的替代品,我们有一个 build.gradle 文件,其中包含以下插件
buildscript {
repositories {
jcenter()
mavenCentral()
}
dependencies {
classpath "com.moowork.gradle:gradle-grunt-plugin:0.6"
classpath 'org.akhikhl.gretty:gretty:+'
}
}
apply plugin: 'scala'
apply plugin: "com.moowork.grunt"
apply plugin: 'war'
apply plugin: 'org.akhikhl.gretty'
./gradlew appStart
和 ./gradlew grunt_dev
运行 在控制台上很好。
但是当添加行时
appStart.dependsOn grunt_dev
脚本,./gradlew appStart
失败并显示
Could not find property 'appStart' on root project 'blah'.
为什么 appStart
任务在 gradle 包装器中可见,而不是在脚本中可见?
的文档
更新
根据下面的@Opal 解释,以下允许将任务挂钩在一起
//Tasks defined in plugins are added after all projects are evaluated
//We have to hook after the evaluation to prevent an evaluation failure
project.afterEvaluate {
project.tasks.appStart.dependsOn grunt_dev
}
当build.gradle
加入如下代码时:
project.tasks.each { println it.name }
可以看出appStart
不在列表中。为什么?可能任务不是在应用 'org.akhikhl.gretty'
(构建脚本评估)时创建的,而是稍后在运行时期间创建的。
稍后会尝试检查。
编辑
和here的解释。在评估所有项目后添加 gretty 插件中定义的任务(阅读 gradle 的生命周期)。这段代码(在 GrettyPlugin.groovy
的最后负责这种行为:
project.afterEvaluate {
addRepositories(project)
addDependencies(project)
addTasks(project)
afterAfterEvaluate(project)
}
测试 gradle 作为 maven 的替代品,我们有一个 build.gradle 文件,其中包含以下插件
buildscript {
repositories {
jcenter()
mavenCentral()
}
dependencies {
classpath "com.moowork.gradle:gradle-grunt-plugin:0.6"
classpath 'org.akhikhl.gretty:gretty:+'
}
}
apply plugin: 'scala'
apply plugin: "com.moowork.grunt"
apply plugin: 'war'
apply plugin: 'org.akhikhl.gretty'
./gradlew appStart
和 ./gradlew grunt_dev
运行 在控制台上很好。
但是当添加行时
appStart.dependsOn grunt_dev
脚本,./gradlew appStart
失败并显示
Could not find property 'appStart' on root project 'blah'.
为什么 appStart
任务在 gradle 包装器中可见,而不是在脚本中可见?
更新
根据下面的@Opal 解释,以下允许将任务挂钩在一起
//Tasks defined in plugins are added after all projects are evaluated
//We have to hook after the evaluation to prevent an evaluation failure
project.afterEvaluate {
project.tasks.appStart.dependsOn grunt_dev
}
当build.gradle
加入如下代码时:
project.tasks.each { println it.name }
可以看出appStart
不在列表中。为什么?可能任务不是在应用 'org.akhikhl.gretty'
(构建脚本评估)时创建的,而是稍后在运行时期间创建的。
稍后会尝试检查。
编辑
和here的解释。在评估所有项目后添加 gretty 插件中定义的任务(阅读 gradle 的生命周期)。这段代码(在 GrettyPlugin.groovy
的最后负责这种行为:
project.afterEvaluate {
addRepositories(project)
addDependencies(project)
addTasks(project)
afterAfterEvaluate(project)
}