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

Pet*_*vic 0 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 ...
Run Code Online (Sandbox Code Playgroud)

一旦运行:

Gradle构建

我得到:

> ls build/resources/main 
file_c.txt

> cat build/resources/main/file_c.txt
my name is fool
test zzz
Run Code Online (Sandbox Code Playgroud)

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

Pet*_*vic 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" )
            }   
    }
}
Run Code Online (Sandbox Code Playgroud)