我有一个多项目gradle构建。我想仅为2个子项目配置分发任务。
假设我有一个根项目和子项目A,B& C.我想为B& S配置分配任务。仅限C。
以下方式有效:
的 root_project /的build.gradle
subprojects{
configure ([project(':B'), project(":C")]) {
apply plugin: 'java-library-distribution'
distributions {
main {
contents {
from('src/main/') {
include 'bin/*'
include 'conf/**'
}
}
}
}
}
但我有兴趣以这种方式工作
subprojects{
configure (subprojects.findAll {it.hasProperty('zipDistribution') && it.zipDistribution}) ) {
apply plugin: 'java-library-distribution'
distributions {
main {
contents {
from('src/main/') {
include 'bin/*'
include 'conf/**'
}
}
}
}
}
在B&的build.gradle中C,我将有以下内容:
ext.zipDistribution = true
在后一种方法中,我有以下两个问题:
问题1
* What went wrong:
Task 'distZip' not found in root project 'root_project'.
* Try:
Run gradle tasks to get a list of available tasks.
问题2
我尝试使用以下代码验证是否可以在root_project中读取属性zipDistribution
subprojects {
.....
// configure ([project(':B'), project(":C")]) {
apply plugin: 'java-library-distribution'
distributions {
/* Print if the property exists */
println it.hasProperty('zipDistribution')
main {
contents {
from('src/main/') {
include 'bin/*'
include 'conf/**'
}
}
}
}
// }
.....
}
以上为it.hasProperty('zipDistribution')打印null。
有人能告诉我什么是正确的方法,以便我看不到这些问题吗?
答案 0 :(得分:1)
这是因为在根项目之后配置了子项目。这就是为什么ext.zipDistribution
在那个时间点null
的原因(尚未设置)。
您需要使用afterEvaluate
来避免这种情况:
subprojects {
afterEvaluate { project ->
if (project.hasProperty('zipDistribution') && project.zipDistribution) {
....
}
}
}