【问题标题】:Nested dynamic properties in gradle scripts?gradle脚本中的嵌套动态属性?
【发布时间】:2016-06-10 07:17:08
【问题描述】:

是否可以在 gradle 构建脚本中使用嵌套属性对全局变量进行分组?

如果gradle.properties 文件包含

mavenUpload.serverUrl=https://someServer.org/mavenrepository

我可以在像 ${mavenUpload.serverUrl} 这样的 gradle 脚本中使用它吗?

// in master gradle.build
task uploadArchives {
    description = "Upload to maven repository '${mavenUpload.serverUrl}'."

    // call all uploadArchives in the sub projects
    dependsOn { subprojects.uploadArchives }
}

是否甚至可以像这样动态创建嵌套属性

ext {
    mavenUpload {
        serverUrl='https://someServer.org/mavenrepository'
        login='myUsername'
        password='myTopSecretPassword'
    }
}

有没有办法在 gradle 中做类似的事情?

我目前的解决方法是使用下划线“_”而不是点“。”

我在 gradle 2.13 中尝试过的内容

ext {
    // works as expected
    myglobal='my global value'

    // error :-(
    myGlobalNested1 {
        myNested='my nested value'
    }

    // error :-(
    myGlobalNested2.ext {
        myNested='my nested value'
    }

    // error :-(
    myGlobalNested4.ext.myNested='my nested value'

    // error :-(
    myGlobalNested5.myNested='my nested value'

    myGlobalNested3 = new HashMap<String,Object>()      

}

// error :-(
myGlobalNested3.ext.myNested='my nested value'

task demo {
    // works as expected
    ext.mylocal='my local value'

    print """
        myglobal = ${myglobal}
        mylocal = ${mylocal}
        demo.mylocal = ${demo.mylocal}

        myGlobalNested.myNested = ${myGlobalNested.myNested}
    """
}

[更新 2016-06-11 @opal]

此脚本无法编译。带有// error :-( 的部分会导致编译错误

【问题讨论】:

  • 对我来说这个问题有点不清楚。您能否提供一个不起作用的 desired 脚本示例?

标签: gradle


【解决方案1】:

我也在为同样的问题苦苦挣扎......

这是怎么回事?

ext {
    parent = ext {
        child = ext {
            grandChild = ext {
                greatGrandChild = "Kourtney"
            }
            grandChildBrother = "Khloé"
        }
        childSister = "Kim"
    }
}

然后

task demo {
    print """
            child sister is ${this.ext.parent.childSister}
            grand child brother is ${this.ext.parent.child.grandChildBrother}
            great grand child is 
            ${this.ext.parent.child.grandChild.greatGrandChild}
    """
}

祝你好运!

【讨论】:

    【解决方案2】:

    我不建议在另一个内部使用ext。这会导致 gradle 出现一些非常奇怪的行为。 this question 的最佳答案为我们提供了创建嵌套 ext 变量的正确方法。

    这将是在 gradle 中制作嵌套变量的正确方法

    ext {
        myarray = [
                name0     : "xx",
                name1     : "xx"
       ]
    }
    

    【讨论】:

      猜你喜欢
      • 2015-05-30
      • 2013-12-16
      • 2013-09-27
      • 2016-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-16
      • 2010-11-06
      相关资源
      最近更新 更多