我们正在过滤xml文件,将某些标记替换为gradle属性。
但是当我们仅更改build.gradle文件中的属性时,不会执行过滤(即复制任务)。
我们应该如何修改脚本,以便每次或至少在修改模板和/或build.gradle时执行过滤。
我们有:
war.doFirst {
delete 'src/main/webapp/WEB-INF/appengine-web.xml'
copy {
from 'build.gradle'
from 'src/main/webapp/WEB-INF/'
into 'src/main/webapp/WEB-INF/'
include '*-template.*'
rename { String fileName ->
fileName.replace('-template', '')
}
expand(gaeApp: "$gaeApp", gaeAppVersion: "$gaeAppVersion")
}
}
我只是在过滤工作的地方进行了一些测试。我很困惑...我确定有时候不会!
因此,在吸血鬼的好评之后,我们尝试了
war {
inputs.file "build.gradle"
exclude 'src/main/webapp/WEB-INF/appengine-web.xml'
// filesMatching('src/main/webapp/WEB-INF/**/*-template.*') {
filesMatching('**/*-template.*') {
println "WAR template: $it"
rename { it.replace '-template', '' }
expand gaeApp: gaeApp, gaeAppVersion: gaeAppVersion
}
}
一美元和一角钱给任何可以解释为什么
filesMatching('src/main/webapp/WEB-INF/**/*-template.*')
无法正常工作的人!但是最大的问题是,即使filesMatching找到模板文件,放置在WAR中的
appengine-web.xml
也不是appengine-web-template.xml
的已处理版本。
最佳答案
您需要将这些属性添加到任务的输入中,例如
war.inputs.property 'gaeApp', gaeApp
war.inputs.property 'gaeAppVersion', gaeAppVersion
以便gradle知道输入已更改,否则它不知道输入何时不同。
但是除此之外,您不应(不需要)在其中使用
copy { }
块。war
任务本身是一个隐式副本规范,因此您应该能够执行以下操作war {
inputs.property 'gaeApp', gaeApp
inputs.property 'gaeAppVersion', gaeAppVersion
exclude 'src/main/webapp/WEB-INF/appengine-web.xml'
filesMatching('src/main/webapp/WEB-INF/**/*-template.*') {
rename { it.replace '-template', '' }
expand gaeApp: gaeApp, gaeAppVersion: gaeAppVersion
}
}
关于gradle - 未执行Gradle复制和筛选任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37119083/