Поддержание последовательности свойств в Gradle - PullRequest
0 голосов
/ 19 февраля 2019

У меня есть задача 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 голосов
/ 19 февраля 2019

Класс свойств Java неупорядочен.Это хорошо в теории, поскольку предполагается сохранить «набор свойств» и, следовательно, не заботиться о порядке расположения свойств в наборе.

На практике не очень хорошо, когда вы часто сталкиваетесь со сценариями, в которых упорядочение имеет значение, например проверка файлов в контроле исходного кода и получение «ложноположительных» изменений, вызванных переупорядочением свойств в файле свойств.

Вы можете либо написать некоторый пользовательский код, чтобы перебрать строки в файле, и самостоятельно изменить эту строку, либо вы можете выбрать использование пользовательского класса, например:

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

, который заменяет класс свойств java, делает нормальные вещи и продолжает упорядочивать.Вышеупомянутый проект github также исправляет еще одну «особенность» персистентности свойств java, которая заключается в том, что он записывает дату в файл свойств, что, опять же, приводит к ложным положительным изменениям.

Это беспокоило меня в течение некоторого времени.Рад, что кто-то пошел вперед и написал вышеуказанное исправление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...