Gradle / Groovy 属性

5
我希望能使用外部属性文件来控制Gradle构建脚本中的“全局”配置,每个构建机器(dev、ci、uat等)都有自己的属性文件,并使用命令行参数指定文件名。

例如: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
        }
    }
}

但是冒号和斜杠会引起异常,我们不想用转义字符来破坏配置。

一定有一种非弃用的方法可以解决这个问题 - 有人能建议一下应该采用哪种“正确”的方法吗?

谢谢。


你尝试过 url="jdbc:someserver://somehost:1234/some_db" 吗? - tim_yates
是的 - 没有起作用... - user1016765
2个回答

6
您可以轻松地消除已弃用警告。您收到的消息可能如下所示:
创建按需属性(即动态属性)已被弃用,并计划在Gradle 2.0中删除。请阅读http://gradle.org/docs/current/dsl/org.gradle.api.plugins.ExtraPropertiesExtension.html,了解替换动态属性的信息。 已弃用的动态属性:"props"在“root project 'private'”上,值为:“true”。
只需将以下内容替换即可解决问题:
project.setProperty('props', props) 

使用

project.ext.props = props

5

补充@Steinar的回答:

仍然可以使用以下语法:

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

如果你有多个来自文件的属性:

props.each({ project.ext.set(it.key, it.value)} )

1
稍微更符合惯用语的写法:props.each { project.ext[it.key] = it.value } - Peter Niederwieser

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接