【问题标题】:Gradle removing comments and reformatting properties fileGradle 删除注释并重新格式化属性文件
【发布时间】:2019-08-25 10:27:11
【问题描述】:

当我尝试在 Gradle 中编辑属性时,它会重新格式化我的整个属性文件并删除 cmets。我假设这是因为 Gradle 读取和写入属性文件的方式。我只想更改一个属性并保持其余属性文件不变,包括将当前的 cmets 保留在适当的位置和值的顺序。使用 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

【问题讨论】:

    标签: java gradle properties-file


    【解决方案1】:

    这本身不是 Gradle 问题。 Java 的默认Properties 对象不保留任何属性文件的布局/注释信息。例如,您可以使用Apache Commons Configuration 来获取保留布局的属性文件。

    这是一个独立的示例 build.gradle 文件,它加载、更改和保存属性文件,保留 cmets 和布局信息(至少在示例文件所需的程度上):

    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()
        }
    }
    

    【讨论】:

    • 由于某种原因,gradle 拒绝识别包 org.apache.commons.configuration2
    • @Mark,我可以使用 Gradle 6.9.1 和 7.3.3 运行这个精确的示例,没有任何问题。您确定将 org.apache.commons:commons-configuration2:2.4 作为 buildscript 依赖项(不是项目依赖项)吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-25
    • 2014-02-23
    • 1970-01-01
    • 2013-10-06
    • 2019-05-19
    相关资源
    最近更新 更多