【问题标题】:Gradle / Groovy propertiesGradle / Groovy 属性
【发布时间】:2013-04-22 19:45:17
【问题描述】:

我想使用每台构建机器(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
        }
    }
}

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

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

谢谢

【问题讨论】:

  • 你试过url="jdbc:someserver://somehost:1234/some_db"
  • 是的 - 没用....

标签: properties configuration groovy gradle


【解决方案1】:

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

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

可以通过替换来修复:

project.setProperty('props', props) 

project.ext.props = props

【讨论】:

    【解决方案2】:

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

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

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

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

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

    【讨论】:

    • 稍微地道一点:props.each { project.ext[it.key] = it.value }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-22
    • 1970-01-01
    • 1970-01-01
    • 2019-10-15
    • 1970-01-01
    • 2019-07-07
    相关资源
    最近更新 更多