【问题标题】:How can I transform a .properties file during a Gradle build?如何在 Gradle 构建期间转换 .properties 文件?
【发布时间】:2012-02-20 13:32:03
【问题描述】:

作为 Gradle 中部署任务的一部分,我想将 foo.properties 中的属性值更改为指向生产数据库而不是开发数据库。

我不想直接替换整个文件,因为它相当大,这意味着我们必须维护两个仅在一行上不同的单独版本。

最好的方法是什么?

【问题讨论】:

    标签: gradle


    【解决方案1】:

    您可以使用 ant.propertyfile 任务:

        ant.propertyfile(
            file: "myfile.properties") {
            entry( key: "propertyName", value: "propertyValue")
            entry( key: "anotherProperty", operation: "del")
        }
    

    【讨论】:

    • 如何使用通配符或文件夹更改多个文件的属性?
    【解决方案2】:

    你应该能够启动一个蚂蚁“替换”任务来做你想做的事:http://ant.apache.org/manual/Tasks/replace.html

    ant.replace(file: "blah", token: "wibble", value: "flibble")
    

    【讨论】:

      【解决方案3】:

      创建一个属性对象,然后使用目标属性文件路径创建文件对象,使用 load 将文件加载到属性对象上,使用 setProperty 设置所需的属性,然后使用 store 保存更改。

      def var = new Properties() 
      File myfile = file("foo.properties");
      
      var.load(myfile.newDataInputStream())
      var.setProperty("db", "prod")
      var.store(myfile.newWriter(), null)
      

      【讨论】:

      • 请添加一些文档/说明。
      【解决方案4】:

      一个简单的解决方案是编写一个使用java.util.Properties 写入文件的任务。如果你真的想增量更新文件,你必须自己实现。或者,也许您找到了一个执行您想要的 Ant 任务(所有 Ant 任务都可以从 Gradle 中按原样使用)。为了获得最佳效果,您还应该声明任务的输入和输出,以便 Gradle 仅在需要更改属性文件时执行任务。

      【讨论】:

      【解决方案5】:

      你可以使用ReplaceTokens

      假设您在src/main/java/resources/com.stackoverlow 中有一个名为db.properties 的文件(位置无关紧要),内容如下

      database.url=@url@
      

      请注意,@ 包围 url 文本是必需的。

      然后您可以在 build.gradle 文件中定义它。

      processResources {
              filter ReplaceTokens, tokens: [
                      "url": "https://stackoverflow.com"
              ]
      }
      

      当您构建代码时,这会将@url@ 替换为https://stackoverflow.com

      如果您只想将此规则应用于特定文件,可以添加filesMatching

      processResources {
          filesMatching('**/db.properties') {
              filter ReplaceTokens, tokens: [
                      "url": "https://stackoverflow.com"
              ]
          }
      }
      

      更多解释请见gradle doc

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-08-05
        • 2019-08-09
        • 2014-12-16
        • 2015-10-31
        • 2014-01-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多