Java 子项目中的渐变扩展属性

Java 子项目中的渐变扩展属性,java,gradle,build,properties,Java,Gradle,Build,Properties,我有一个Java项目(用Gradle4.6构建),它包含几个模块,每个模块都有自己的build.Gradle。主项目中还有build.gradle。所以结构看起来像: / /build.gradle /module-number-one/build.gradle /module-number-two/build.gradle 一切正常,但我无法从主脚本访问扩展属性。例如,在/module number one/build.gradle中,我有: ext { myProp = 'some

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

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

ext {
   myProp = 'some value'
}
当我这样做的时候:

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

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

项目属性评估的问题,如果您将属性引用放在
项目之后。在评估后,它应该可以工作:

task findModule {
    subprojects {
        project -> project.afterEvaluate {
            println(project.name + ": " + project.ext.has('cons'))
            println(project.name + ": " + project.hasProperty('cons'))
        }
    }
}
输出:

$ gradle -q findModule
module-number-one: true
module-number-one: true
module-number-two: false
module-number-two: false

请注意,示例中的任务完全无关,不会做任何事情@lu.koerfer你的意思是什么?只需执行
gradle-q
,而不执行任务
find模块
,输出将是相同的。因为您使用的是任务配置闭包,它将始终被执行。使用
doFirst
doLast
闭包(这样您就不需要
afterEvaluate
),或者删除任务并将代码放在构建脚本中的任何位置。