测试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
}
答案 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)
}