gradle process具有不同替换和重命名规则的资源

时间:2016-11-23 21:29:28

标签: java gradle

我想在我的gradle项目中过滤特定的java资源。如果某些文件只应替换内容,则还应重命名一些文件(并替换不同的内容)。

我的gradle java项目设置是:

> cat build.gradle 
apply plugin: 'java'
sourceSets {
    main {
        java { 
            resources { 
                srcDirs = [ "foo" ]
                include '**/**'
            } 
        }       
    }
}

processResources {
    include '**/file_a.txt'
    filter { String line ->
        line
            .replace("foo", "fool" )
        }   
}


processResources {
    include '**/file_b.txt'
    rename { "file_c.txt" }
    filter { String line ->
        line
            .replace("ipsum", "zzz" )
        }   
}                                        

> cat foo/file_a.txt 
my name is foo
test ipsum 

> cat foo/file_b.txt
lorem ipsum ...

运行后:

  

gradle build

我明白了:

> ls build/resources/main 
file_c.txt

> cat build/resources/main/file_c.txt
my name is fool
test zzz

但是我想要获取这两个文件,其中只有file_b.txt将被重命名,并且两者都将被特定规则替换。实现这一目标的正确方法是什么?

2 个答案:

答案 0 :(得分:5)

好的,我自己找到了解决方案,以下似乎按预期工作:

apply plugin: 'java'
sourceSets {
    main {
        java { 
            resources { 
                srcDirs = [ "foo" ]
                include '**/**'
                exclude '**/*.txt'
            } 
        }       
    }
}

processResources {
    with copySpec {
        from 'foo/file_a.txt'
        filter { String line ->
            line
                .replace("foo", "fool" )
            }   
    }

    with copySpec {
        from 'foo/file_b.txt'
        rename { "file_c.txt" }
        filter { String line ->
            line
                .replace("ipsum", "zzz" )
            }   
    }
}

答案 1 :(得分:1)

我个人认为资源和过滤后的资源应该分开。即src/main/resourcessrc/main/filteredResources。我也应该避免排除(例如exclude '**/*.txt'resourcesfilteredResources目录应该只包含最终会出现在jar中的东西......没什么用的

import org.apache.tools.ant.filters.ReplaceTokens

processResources {
    with copySpec {
        from 'src/main/filteredResources'
        filter(ReplaceTokens, tokens: [foo: 'fool', ipsum: 'zzz'])
    }
}

以上代码段将替换@foo@文件夹中所有文件中的@ipsum@src/main/filteredResources