Gradle/Groovy属性

use*_*765 5 configuration groovy properties gradle

我想在每个构建机器(dev,ci,uat,...)上使用外部属性文件控制Gradle构建脚本中的'global'配置,并使用命令行参数指定文件名.

例如 gradle -DbuildProperties=/example/config/build.properties

我特别不想使用gradle.properties,因为我们已经使用这种方法的现有项目(例如)我们希望能够修改数据库URL和jdbc驱动程序而无需更改每个项目.

到目前为止已经尝试过: -

Properties props = new Properties() 
props.load(new FileInputStream("$filename")) 
project.setProperty('props', props) 
Run Code Online (Sandbox Code Playgroud)

哪个有效,但有一个弃用的警告,但我无法弄清楚如何避免这种情况.

还试过使用ConfigSlurper的groovy样式配置文件: -

environments {
    dev {
        db.security {
            driver=net.sourceforge.jtds.jdbc.Driver
            url=jdbc:someserver://somehost:1234/some_db
            username=userId
            password=secret
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是冒号和正斜杠会导致异常,我们不希望使用转义字符搞乱配置.

必须有一种不贬低的方式来做到这一点 - 任何人都可以提出"正确"的方式吗?

谢谢

Ste*_*nar 6

您可以很容易地删除已弃用的警告.你得到的消息可能看起来像这样:

不建议按需创建属性(也称为动态属性),并计划在Gradle 2.0中删除它们.有关替换动态属性的信息,请阅读http://gradle.org/docs/current/dsl/org.gradle.api.plugins.ExtraPropertiesExtension.html.不推荐使用的动态属性:"root project'private'"上的"props",值:"true".

它可以通过替换来修复:

project.setProperty('props', props) 
Run Code Online (Sandbox Code Playgroud)

project.ext.props = props
Run Code Online (Sandbox Code Playgroud)


小智 5

只是为了补充@Steinar给出的回应:

它仍然可以使用下一个语法:

project.ext.set('prop_name', prop_value)
Run Code Online (Sandbox Code Playgroud)

如果您有来自file的多个属性:

props.each({ project.ext.set(it.key, it.value)} )
Run Code Online (Sandbox Code Playgroud)