gradle:插件任务`dependsOn`另一个插件任务失败

时间:2015-01-22 10:38:07

标签: gradle gretty

测试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包装器中看到而不是在脚本中?

gretty appStart

上的文档

更新

按照下面的@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
}

1 个答案:

答案 0 :(得分:4)

将以下代码添加到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)
}