Gradle удаляет комментарии и переформатирует файл свойств - PullRequest
1 голос
/ 03 апреля 2019

Когда я пытаюсь редактировать свойство в Gradle, оно переформатирует весь мой файл свойств и удаляет комментарии.Я предполагаю, что это из-за способа чтения и записи Gradle в файл свойств.Я хотел бы просто изменить свойство и оставить остальную часть файла свойств без изменений, в том числе оставить текущие комментарии на месте и порядок значений.Это возможно сделать с помощью Gradle 5.2.1?

Я пытался просто использовать setProperty (который не записывает в файл), использовал другой писатель: (versionPropsFile.withWriter { versionProps.store(it, null) } )

и пробовал другой способ чтения в файле свойств: versionProps.load(versionPropsFile.newDataInputStream())

Вот мой текущий код Gradle:

   File versionPropsFile = file("default.properties");

   def versionProps = new Properties() 

   versionProps.load(versionPropsFile.newDataInputStream())

    int version_minor = versionProps.getProperty("VERSION_MINOR")
    int version_build = versionProps.getProperty("VERSION_BUILD")

    versionProps.setProperty("VERSION_MINOR", 1)
    versionProps.setProperty("VERSION_BUILD", 2)

    versionPropsFile.withWriter { versionProps.store(it, null) }

Вот фрагмент того, как выглядит файл свойств до того, как Gradle коснется его:

# Show splash screen at startup (yes* | no)
SHOW_SPLASH = yes

# Start in minimized mode (yes | no*)
START_MINIMIZED = no

# First day of week (mon | sun*)
# FIRST_DAY_OF_WEEK = sun

# Version number
# Format: MAJOR.MINOR.BUILD

VERSION_MAJOR = 1
VERSION_MINOR = 0
VERSION_BUILD = 0

# Build value is the date

BUILD = 4-3-2019

Здесьвот что Gradle делает с ним:

#Wed Apr 03 11:49:09 CDT 2019
DISABLE_L10N=no
LOOK_AND_FEEL=default
ON_MINIMIZE=normal
CHECK_IF_ALREADY_STARTED=YES
VERSION_BUILD=0
ASK_ON_EXIT=yes
SHOW_SPLASH=yes
VERSION_MAJOR=1
VERSION_MINOR=0
VERSION_BUILD=0
BUILD=04-03-2019
START_MINIMIZED=no
ON_CLOSE=minimize
PORT_NUMBER=19432
DISABLE_SYSTRAY=no

1 Ответ

1 голос
/ 07 апреля 2019

Это не проблема Gradle как таковая. Объект Java по умолчанию Properties не сохраняет никакой информации о расположении / комментариях файлов свойств. Вы можете использовать Конфигурация Apache Commons , например, чтобы получить файлы свойств, сохраняющие макет.

Вот автономный образец build.gradle файла, который загружает, изменяет и сохраняет файл свойств, сохраняя комментарии и информацию о макете (по крайней мере, в той степени, которая требуется для вашего файла примера):

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'org.apache.commons:commons-configuration2:2.4'
    }
}

import org.apache.commons.configuration2.io.FileHandler
import org.apache.commons.configuration2.PropertiesConfiguration
import org.apache.commons.configuration2.PropertiesConfigurationLayout

task propUpdater {
    doLast {
        def versionPropsFile = file('default.properties')

        def config = new PropertiesConfiguration()
        def fileHandler = new FileHandler(config)
        fileHandler.file = versionPropsFile
        fileHandler.load()

        // TODO change the properties in whatever way you like; as an example,
        // we’re simply incrementing the major version here:
        config.setProperty('VERSION_MAJOR',
            (config.getProperty('VERSION_MAJOR') as Integer) + 1)

        fileHandler.save()
    }
}
...