5

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

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

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

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

Properties props = new Properties() 
props.load(new FileInputStream("$filename")) 
project.setProperty('props', props) 

它有效,但有一个已弃用的警告,但我不知道如何避免这种情况。

还尝试使用带有 ConfigSlurper 的 groovy 样式配置文件:-

environments {
    dev {
        db.security {
            driver=net.sourceforge.jtds.jdbc.Driver
            url=jdbc:someserver://somehost:1234/some_db
            username=userId
            password=secret
        }
    }
}

但是冒号和正斜杠会导致异常,我们不想用转义字符弄乱配置。

必须有一种不被弃用的方式来做到这一点 - 任何人都可以提出“正确”的方式来做到这一点吗?

谢谢

4

2 回答 2

6

您可以很容易地摆脱已弃用的警告。您收到的消息可能如下所示:

按需创建属性(也称为动态属性)已被弃用,并计划在 Gradle 2.0 中删除。有关替换动态属性的信息,请阅读http://gradle.org/docs/current/dsl/org.gradle.api.plugins.ExtraPropertiesExtension.html 。不推荐使用的动态属性:“根项目'private'”上的“props”,值:“true”。

可以通过更换来修复:

project.setProperty('props', props) 

project.ext.props = props
于 2013-04-22T20:56:14.990 回答
5

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

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

project.ext.set('prop_name', prop_value)

如果您有文件中的几个属性:

props.each({ project.ext.set(it.key, it.value)} )
于 2013-08-12T15:06:02.857 回答