假设我有一个属性文件config.properties
,其中包含
prop1=abc
prop2=xyz
和一个template-config.xml
,看起来像
<bean id="id1" >
<property name="prop1" value="${prop1}" />
<property name="prop2" value="${prop2}" />
</bean>
我有两个问题:
1.是否可以使用gradle复制任务的expand()部分中的属性文件将属性从gradle. build. kts注入配置?
1.有没有一种方法可以使用expand只填充其中一个属性而不引发错误?
到目前为止我有
tasks.register<Copy>("create-config-from-template") {
from("$buildDir/resources/main/template-config.xml")
into("$buildDir/dist")
expand(Pair("prop1", "abc"))
}
但是,这会引发错误
Groovy模板扩展缺少属性(prop2)。已定义键[prop1]。
我知道我也可以在"expand()"中指定prop2的值,但就我的目的而言,如果我只能注入一些属性而不注入其他属性,那将有所帮助。有没有一种简单的方法可以告诉gradle不要担心文件中的其他"${}"属性?
如果没有,有没有方法可以使用实际的属性文件作为属性集进行扩展?我似乎在任何地方都找不到Kotlin DSL语法。
先谢谢你了。
1条答案
按热度按时间zy1mlcev1#
对于1,您可以使用configure existing
processResources
任务将其他配置应用于特定文件。在本例中,template-config.xml
为例:filesMatching
将匹配你想要的文件,然后接下来的行加载属性文件,在本例中是项目根目录下的文件名example.properties
,然后将其转换为Map<String, Any>
并传递给expand
方法。但是,对于2,如果缺少任何属性,则使用上述方法将失败。这是因为底层扩展引擎(
SimpleTemplateEngine
)不允许这样的配置作为一种替代方法,您可以使用Apache ANT中的
ExpandTokens
来实现某些属性丢失时的替换:请注意,对于
ReplaceTokens
,必须将占位符从${example}
更改为@example@
:这是因为Gradle仅接受
Class
,而ReplaceTokens
为final
,因此您无法扩展该类以使用${}
作为占位符。