如何在 Gradle 中合并 属性 个文件?

How Do I Combine Property Files In Gradle?

我有一个 ant 任务,它将 2 个 属性 文件组合在一起形成一个属性文件。

base.config 包含大部分属性,override.config 包含一个或多个修改 base.config

中的值的属性
<!--Combine the base.config and override.config together to create a properties file-->
<target name="generateProperties" depends="init">
    <property prefix="app.properties" file="override.config"/>
    <property prefix="app.properties" file="base.config"/>
    <echoproperties destfile="${build.dir}/combined.properties">
        <propertyset>
            <propertyref prefix="app.properties"/>
            <mapper type="glob" from="app.properties.*" to="*"/>
        </propertyset>
    </echoproperties>
</target>

如何在 gradle 中做同样的事情(不导入 ant 任务)?

有 (5) 个 属性 'scopes' Gradle 用于查找属性。他们是:

  • Project 实例本身
  • 额外属性
  • 扩展程序
  • 惯例
  • 任务
  • 项目父级(递归查找以上)

您可以在此处阅读更深入的概述:https://docs.gradle.org/current/javadoc/org/gradle/api/Project.html#properties

Gradle 按该顺序搜索属性。因此,您可以在链的较低位置定义基本属性,并在链的较高位置提供覆盖。

有一个WriteProperties任务可以可靠地保存属性。

然后您只需以覆盖基础的方式传递属性。

例如

task generateProperties(type: WriteProperties) {
    Properties combinedProperties = new Properties()
    File baseProperties = file('base.config')
    baseProperties.withInputStream {
        combinedProperties.load(it)
    }
    File overrideProperties = file('override.config')
    overrideProperties.withInputStream {
        combinedProperties.load(it)
    }
    properties = combinedProperties
    outputFile = file("$buildDir/combined.properties")
}