Gradle 渐变过滤器替换XML文件中的标记

Gradle 渐变过滤器替换XML文件中的标记,gradle,Gradle,我在下面的代码中替换了xml文件中的令牌,但当我尝试使用项目变量时,代码不起作用。我以-Ptest=“value”的形式通过了变量测试。硬编码的价值工程,但我不能硬价值时,建立我的项目 applicationContext.xml 格雷德尔先生 task replaceToken(类型:Copy){ 来自“${buildDir}/classes/main/WEB-INF/spring” 进入“${buildDir}/classes/test” 筛选器(替换令牌,令牌:[test:${proj

我在下面的代码中替换了xml文件中的令牌,但当我尝试使用项目变量时,代码不起作用。我以-Ptest=“value”的形式通过了变量测试。硬编码的价值工程,但我不能硬价值时,建立我的项目

applicationContext.xml

格雷德尔先生
task replaceToken(类型:Copy){
来自“${buildDir}/classes/main/WEB-INF/spring”
进入“${buildDir}/classes/test”
筛选器(替换令牌,令牌:[test:${project.test}]]
}

在XML中,您使用令牌
@test@
,但在任务配置中,您告诉Gradle替换
@APPNAME@
,这不匹配,因此不替换任何内容。更改其中一个以匹配另一个,它将起作用

除此之外,
“${project.test}”
并不是真正必要的,只需编写
project.test
甚至
test
就足够了。如果变量是字符串的唯一内容,则无需动态解析该变量

另外,将其作为一个单独的复制任务可能不是最好的主意,如果在同一位置有不同的任务生成输出,则它不利于可靠和良好的工作最新检查。对于这个用例,您可以配置
processTestResources
任务,例如。G使用
filematching
块匹配要替换的文件,然后在其中配置过滤器


此外,无论您是使用自己的任务还是配置
processTestResources
任务,都应该将
test
属性的值添加到任务的输入中,以便最新的检查机制知道如果属性值更改,它必须重新运行任务。否则,即使值发生变化,任务也会作为最新任务跳过。

这是我的输入错误,已更正,但仍然不起作用。当我使用justtestin标记值时,我得到了类强制转换异常。您是否有要共享的示例代码?您得到的确切异常是什么?
标记
映射中的值必须是普通的
字符串
对象。如果要使用
“${project.test}”
,这是一个
GString
对象,因此必须使用
“${project.test}”作为字符串。如果
test
是项目属性,那么在这里使用
tokens:[test:test]
就可以了。如果不是,则
test
将解析为名为
test
的任务,当然会导致
ClassCastException
。我认为防止这种情况发生的唯一方法是确保始终设置属性,或者您必须将属性命名为与任务名称不同的名称。此外,无论您是使用自己的任务还是配置
processTestResources
任务,您都应该将
test
属性的值添加到任务的输入中,因此,最新的检查机制知道如果属性值更改,它必须重新运行任务。否则,即使值发生更改,任务也会作为最新任务跳过。