Gradle任务替换.java文件中的字符串

时间:2015-11-01 16:46:15

标签: java gradle task

我希望在编译代码之前替换Config.java文件中的几行。我能找到的只是在复制过程中通过过滤器解析文件。一旦我必须复制它,我必须将它保存在某个地方 - 这就是为什么我去寻求解决方案:在替换行时复制到临时位置>删除原始文件>将复制的文件复制回原始位置>删除临时文件。有更好的解决方案吗?

3 个答案:

答案 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)

  1. 我绝对不会覆盖原始文件
  2. 我喜欢保持基于目录而不是基于文件名,所以如果是我,我会把Config.java放在它自己的文件夹中(例如generated-src
  3. 我在$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 任务删除。
  4. 您可以使用Copy任务和ReplaceTokens过滤器。例如:

    ReadLine