如何在 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")
}
我有一个 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")
}