linux - 在gradle中维护属性序列

标签 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)
}

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

最佳答案

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

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

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

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

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

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

关于linux - 在gradle中维护属性序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54765447/

相关文章:

linux - 根据Process ID可以知道最近有没有访问过CPU的cache内存?

linux - 使用 lftp 比较远程目录而不执行传输

java - 如何替换 gradle 中依赖项的依赖项?

使用 Spring Boot 的 Spring Data Rest 和 spring-data-rest-hal-browser 集成

grails - 在 Grails 中使用聚合函数派生属性

xml - 将 XML 片段插入 Groovy 中的另一个 XML 文档

linux - 同一项目的SVN分支之间自动切换

Ubuntu 中的 C++ 手册页

java - Android Studio : Duplicate files copied in APK META-INF/LICENSE when compile(exclude did not work)

groovy - SOAPUI 方括号括住我的实际结果,导致断言失败