维护gradle中的属性顺序

时间:2019-02-19 11:37:50

标签: linux gradle groovy

我有一个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)
}

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

1 个答案:

答案 0 :(得分:0)

java Properties类是无序的。从理论上讲,这很好,因为它应该保留“属性集”,因此不必关心属性在属性集中的排序。

在实践中,您经常遇到一些排序问题,例如将文件检入源代码管理并获得由于对属性文件中的属性进行重新排序而导致的“误报”更改,这种情况不太好。

您可以编写一些自定义代码以遍历文件中的行并自行更改一行,也可以选择使用自定义类,如下所示:

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

替换java属性类,执行理智的操作并保持顺序。上面的github项目还修复了Java属性持久性的另一个“功能”,即它将日期写到属性文件中,这再次导致错误的肯定更改。

这已经困扰了我一段时间了。很高兴有人继续写了上面的修复程序。