【问题标题】:Maintaining sequence of properties in gradle在 gradle 中维护属性的顺序
【发布时间】:2019-07-12 21:49:48
【问题描述】:

我有一个 gradle 任务来读取属性文件并修改其中一个属性。

task addVersion {
    File configPropFile = file(configFilePath)
    def configProperties = new Properties()
    configProperties.load(configPropFile.newDataInputStream())
    def versions = configProperties.getProperty('product.versions')
    if(!versions.contains("1.2")){
        configProperties.setProperty('product.versions', versions + ',' + "1.2")
    }
    configProperties.store(configPropFile.newWriter(), null)
}

此任务成功地重写了属性文件,但在重写时不会保持读取属性的顺序。有人可以帮助我进行更改以维护文件中属性的顺序吗?

【问题讨论】:

标签: linux gradle groovy


【解决方案1】:

java Properties 类是无序的。这在理论上很好,因为它应该保留“一组属性”,因此不关心集合内属性的顺序。

在实践中,您经常遇到排序问题的场景,例如将文件检查到源代码管理中,以及由于对属性文件中的属性重新排序而导致“误报”更改,这在实践中并不是很好。

您可以编写一些自定义代码来遍历文件中的行并自己更改该行,或者您可以选择使用如下自定义类:

https://github.com/etiennestuder/java-ordered-properties

它替换了 java 属性类,做的是理智的事情并保持排序。上面的 github 项目还修复了 java 属性持久性的另一个“功能”,即它将日期写入属性文件,这再次导致误报更改。

这让我困扰了一段时间。很高兴有人继续编写上述修复程序。

【讨论】:

    猜你喜欢
    • 2017-06-10
    • 2014-09-29
    • 1970-01-01
    • 2011-06-02
    • 2013-11-19
    • 2014-03-03
    • 1970-01-01
    • 2018-05-19
    • 2020-07-31
    相关资源
    最近更新 更多