如何使用包含文件匹配的copySpec使用Gradle构建war文件

如何使用包含文件匹配的copySpec使用Gradle构建war文件,gradle,Gradle,因此,这是可行的: war { filesMatching('**/index.jsp') { filter(org.apache.tools.ant.filters.ReplaceTokens, tokens: [ 'version' : version, ]) } } 但这并不是: def webappFilter = project.copySpec { filesMatching('**/index.jsp')

因此,这是可行的:

war {
    filesMatching('**/index.jsp') {
        filter(org.apache.tools.ant.filters.ReplaceTokens, tokens: [
          'version' : version,
        ])
    }
}
但这并不是:

def webappFilter = project.copySpec {
    filesMatching('**/index.jsp') {
        filter(org.apache.tools.ant.filters.ReplaceTokens, tokens: [
          'version' : version,
        ])
    }
}

war {
    with webappFilter
}

显然,我做错了,但我不明白我到底错过了什么。有人能帮忙吗?

我在复印机方面也遇到过类似的问题,格雷德就是不使用复印机。在尝试了许多变体之后,它只在向copySpec添加副本闭包时对我有效

def cs = copySpec {
    copy {
        from("readme.txt")
        into("somefolder")
        filter{String line -> line.replaceAll('a','b')}
    }
}   

task mycopy (type: Copy) {
    with cs 
} 

希望这有帮助。

这是可行的,但实际上它破坏了动态CopySpec的优势,因为您已经在CopySpec实例中定义了from和into。也没有最新的检查了。