我有一个 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)
}
此任务成功地重写了属性文件,但在重写时并没有保持读取属性的顺序。有人可以帮助我进行更改以维护文件中属性的顺序吗?
最佳答案
java Properties 类是无序的。这在理论上很好,因为它应该保留一组“属性”,因此不关心集合中属性的顺序。
在实践中,它不是很好,因为您经常遇到排序问题的场景,例如将文件 checkin 源代码控制以及由于对属性文件中的属性重新排序而导致“误报”更改。
您可以编写一些自定义代码来遍历文件中的行并自己更改该行,或者您可以选择使用如下所示的自定义类:
https://github.com/etiennestuder/java-ordered-properties
它取代了 java 属性类,做了理智的事情并保持排序。上面的 github 项目还修复了 java 属性持久性的另一个“功能”,即它将日期写出到属性文件中,这再次导致误报更改。
这件事困扰了我一段时间。很高兴有人继续写了上面的修复程序。
关于linux - 在gradle中维护属性序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54765447/