Gradle:为选择的子项目配置分发任务

时间:2013-09-17 00:17:51

标签: java gradle build.gradle

我有一个多项目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。

有人能告诉我什么是正确的方法,以便我看不到这些问题吗?

1 个答案:

答案 0 :(得分:1)

这是因为在根项目之后配置了子项目。这就是为什么ext.zipDistribution在那个时间点null的原因(尚未设置)。

您需要使用afterEvaluate来避免这种情况:

subprojects {
    afterEvaluate { project ->
        if (project.hasProperty('zipDistribution') && project.zipDistribution) {
            ....
        }
    }
}