子项目中的 Gradle 扩展属性

Nik*_*ita 3 java properties build gradle

我有一个 Java 项目(使用 Gradle 4.6 构建),其中包含几个模块,并且每个模块都有自己的 build.gradle。主项目中还有build.gradle。所以结构看起来像:

/
/build.gradle
/module-number-one/build.gradle
/module-number-two/build.gradle
Run Code Online (Sandbox Code Playgroud)

一切正常,但我无法从主脚本访问扩展属性。例如/module-number-one/build.gradle我有:

ext {
   myProp = 'some value'
}
Run Code Online (Sandbox Code Playgroud)

当我这样做时:

allprojects.findAll { Project project ->
    println(project.ext.has('myProp'))
    // or
    println(project.hasProperty('myProp'))
    // or
    println(project
        .getExtensions()
        .getExtraProperties()
        .getProperties()
        .contains('myProp'))
}
Run Code Online (Sandbox Code Playgroud)

我收到的是假的。是否可以仅从同一个文件访问 ext 或者我做错了什么?

che*_*rui 5

项目属性评估的问题,如果将属性引用放在 后面project.afterEvaluate,它应该可以工作:

task findModule {
    subprojects {
        project -> project.afterEvaluate {
            println(project.name + ": " + project.ext.has('cons'))
            println(project.name + ": " + project.hasProperty('cons'))
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

$ gradle -q findModule
module-number-one: true
module-number-one: true
module-number-two: false
module-number-two: false
Run Code Online (Sandbox Code Playgroud)