我希望在编译代码之前替换Config.java文件中的几行。我能找到的只是在复制过程中通过过滤器解析文件。一旦我必须复制它,我必须将它保存在某个地方 - 这就是为什么我去寻求解决方案:在替换行时复制到临时位置>删除原始文件>将复制的文件复制回原始位置>删除临时文件。有更好的解决方案吗?
答案 0 :(得分:12)
可能你应该尝试像蚂蚁replaceregexp:
这样的东西task myCopy << {
ant.replaceregexp(match:'aaa', replace:'bbb', flags:'g', byline:true) {
fileset(dir: 'src/main/java/android/app/cfg', includes: 'TestingConfigCopy.java')
}
}
此任务将用aaa
替换bbb
的所有出现。无论如何,它只是一个例子,你可以根据你的目的修改它或者尝试使用ant的类似解决方案。
答案 1 :(得分:8)
为了补充lance-java
的答案,如果您只想改变一个值,我发现这个成语更简单:
task generateSources(type: Copy) {
from 'src/replaceme/java'
into "$buildDir/generated-src"
filter { line -> line.replaceAll('xxx', 'aaa') }
}
答案 2 :(得分:7)
generated-src
)$buildDir
下创建了一个clean
目录,因此它已通过apply plugin: 'java'
task generateSources(type: Copy) {
from 'src/replaceme/java'
into "$buildDir/generated-src"
filter(ReplaceTokens, tokens: [
'xxx': 'aaa',
'yyy': 'bbb'
])
}
// the following lines are important to wire the task in with the compileJava task
compileJava.source "$buildDir/generated-src"
compileJava.dependsOn generateSources
任务删除。您可以使用Copy任务和ReplaceTokens过滤器。例如:
ReadLine