Gradle task replace string in .java file

前端 未结 3 1168
醉话见心
醉话见心 2020-12-03 10:31

I want to replace few lines in my Config.java file before the code gets compiled. All I was able to find is to parse file through filter during copying it. As soon as I have

相关标签:
3条回答
  • 2020-12-03 10:53

    To complement lance-java's answer, I found this idiom more simple if there's only one value you are looking to change:

    task generateSources(type: Copy) {
        from 'src/replaceme/java'
        into "$buildDir/generated-src"
        filter { line -> line.replaceAll('xxx', 'aaa') }
    }
    

    Caveat: Keep in mind that the Copy task will only run if the source files change. If you want your replacement to happen based on other conditions, you need to use Gradle's incremental build features to specify that.

    0 讨论(0)
  • 2020-12-03 10:53
    1. I definitely wouldn't overwrite the original file
    2. I like to keep things directory based rather than filename based so if it were me, I'd put Config.java in it's own folder (eg src/replaceme/java)
    3. I'd create a generated-src directory under $buildDir so it's deleted via the clean task.

    You can use the Copy task and ReplaceTokens filter. Eg:

    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
    
    0 讨论(0)
  • 2020-12-03 11:00

    May be you should try something like ant's replaceregexp:

    task myCopy << {
        ant.replaceregexp(match:'aaa', replace:'bbb', flags:'g', byline:true) {
            fileset(dir: 'src/main/java/android/app/cfg', includes: 'TestingConfigCopy.java')
        }
    }
    

    This task will replace all occurances of aaa with bbb. Anyway, it's just an example, you can modify it under your purposes or try some similar solution with ant.

    0 讨论(0)
提交回复
热议问题