我有以下结构:
./build.gradle
./api
./api/build.gradle
./web
./web/build.gradle
./other
./other/build.gradle
api和web项目都使用了war
插件,但是other项目只有java
插件。
我想在根项目中为 heroku 定义一个任务,即:
- 对所有拥有它的子项目执行clean任务
- 对所有拥有它的子项目执行war任务
- 对所有拥有它的子项目执行build任务
我看到了这个答案:Gradle batch task that invokes subproject and other tasks in order 但它失败了。尝试了以下配置
task stage() {
dependsOn subprojects.clean
dependsOn subprojects.war
dependsOn subprojects.build
}
并得到这个错误:
* What went wrong:
A problem occurred evaluating root project 'baltona-mdm'.
> Could not find property 'war' on project ':api'.
(api 有 war
插件,如果我取消注释任务阶段,我可以运行gradle :api:war
)
我该怎么做?
最佳答案
错误的解决方法:
Could not find property 'war' on project ':api'
是为了使用
evaluationDependsOnChildren()
然而,对于标题中的问题,我想出了类似的东西:
task stage() {
subprojects.each({p ->
dependsOn p.clean
if(hasWarTask(p)) {
dependsOn p.war
} else {
dependsOn p.build
}
})
}
private boolean hasWarTask(Project p) {
!p.getTasksByName("war", false).isEmpty()
}
我不喜欢它,所以如果有人有更好的解决方案,我愿意接受替代方案。
关于gradle - 对子项目 war 任务的依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22788890/