groovy - 在Gradle子项目中找不到属性

标签 groovy gradle

我有一个简单的gradle项目,其结构如下:

root
|
sampleapp
|  |
|  build.gradle
|
build.gradle
settings.gradle
gradle.properties

在我的根build.gradle中,我有以下关闭内容:
subprojects {
   ext {
     flag = true
   }
   afterEvaluate { subproj -> 
     if(subproj.ext.flag) {
        sampleProp = [
             prop1: "abc",
             prop2: "def"
        ]
     }
   }
}

运行gradle构建时,“sampleapp”项目使用sampleProp结构,但出现以下异常:
Could not find property 'sampleProp' on org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler_Decorated@7d548fa0.

我明显在做什么错吗?

最佳答案

假设您尝试将sampleProp作为属性添加到子项目中,则可以进行以下操作:

根项目build.gradle:

subprojects {
    ext {
        flag = true
    }

// This property will be available both at config and exec phases from subproject
    if (ext.flag) {
        println 'yes'
        ext.configPhaseProp = [
                prop1: "defined in root build.gradle",
                prop2: "config"
        ]
    }

// This property will be be available **only** in exec phase
    afterEvaluate { subproj ->
        if (subproj.ext.flag) {
            subproj.ext.execPhaseProp = [
                    prop1: "defined in root build.gradle",
                    prop2: "exec"
            ]
        }
    }

    task HelloFromRoot<<{
        println "######## RootHello"
        println flag
        println "RootHello: $configPhaseProp.prop1 :: $configPhaseProp.prop2"
        println "RootHello: $execPhaseProp.prop1 :: $execPhaseProp.prop2"
    }
}

子项目build.gradle:
println '########## ConfigTime'
println flag
println "Config: $configPhaseProp.prop1 :: $configPhaseProp.prop2"
//println "Config: $execPhaseProp.prop1 :: $execPhaseProp.prop2" 
//^^ Uncommenting this line will cause a "Could not find property error"

task SubHello << {
    println '########## SubHello'
    println flag
    println "SubHello: $configPhaseProp.prop1 :: $configPhaseProp.prop2"
    println "SubHello: $execPhaseProp.prop1 :: $execPhaseProp.prop2"
}

运行任务HelloFromRoot:
########## ConfigTime
true
Config: defined in root build.gradle :: config
:SubProject1:HelloFromRoot
######## RootHello
true
RootHello: defined in root build.gradle :: config
RootHello: defined in root build.gradle :: exec

运行任务SubHello:
########## ConfigTime
true
Config: defined in root build.gradle :: config
:SubProject1:SubHello
########## SubHello
true
SubHello: defined in root build.gradle :: config
SubHello: defined in root build.gradle :: exec

关于groovy - 在Gradle子项目中找不到属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33880968/

相关文章:

jenkins - 如何在 Jenkins Job DSL 中创建可扩展的基础作业?

datetime - 在Elasticsearch上查询最接近日期时间的文档的最佳方法是什么?

grails - 使用Spock测试在Grails中触发了beforeUpdate或beforeInsert

gradle - 我可以通过groovy更简单(更短)地实现此代码吗?

具有自动柯里化(Currying)功能的 Groovy 闭包

java - Gradle 将依赖配置与任务绑定(bind)

android - 全新安装 Android Studio 后 Gradle 无法同步

gradle - 提供者 pactVerify 没有获取 JSON Pact 文件

intellij-idea - Gradle War插件更改文件名称

java - 架构名称中的破折号 - Groovy SQL 查询错误