War 在src/main/webapp中过滤文件子集的渐变方式是什么?

War 在src/main/webapp中过滤文件子集的渐变方式是什么?,war,gradle,War,Gradle,我正在向gradle做一个maven转换,希望看到关于执行以下操作的最佳方式的意见。我目前在src/main/webapp下有多个文件。有些需要以一种方式过滤,有些需要以另一种方式过滤 名义上,在src/main/webapp下,我有一个包含html和二进制文件的目录foo,在webapp下有许多其他文件,包括html。我只想过滤foo/*.html文件 在我的概念build.gradle中,我可以: war { eachFile { if(shouldFilter(it)) {

我正在向gradle做一个maven转换,希望看到关于执行以下操作的最佳方式的意见。我目前在src/main/webapp下有多个文件。有些需要以一种方式过滤,有些需要以另一种方式过滤

名义上,在src/main/webapp下,我有一个包含html和二进制文件的目录foo,在webapp下有许多其他文件,包括html。我只想过滤foo/*.html文件

在我的概念build.gradle中,我可以:

war {
  eachFile {
    if(shouldFilter(it)) {
      it.filter(ReplaceTokens, tokens: [key: 'value'])
    }
  }
}

def shouldFilter(input) {
  input.path.contains('foo') && input.name.endsWith('.html')
}
或者将每个子集移动到默认情况下不复制的自己的目录中

war {
  from('src/main/foo-pre-filter') {
    into 'foo'
    include '*.html'
    filter(ReplaceTokens, tokens: [key: 'value'])
  }
}

或者我还遗漏了其他选项吗?

如果我正确理解了问题,您可以使用文件匹配。另外,我将把它作为processResources任务的一部分,而不是war任务。它看起来像这样:

processResources {
    filesMatching('foo/*.html') {
        filter(ReplaceTokens, tokens: [key: 'value'])
    }
}

我意识到最初的问题是2年前提出的,所以这可能对提问者没有帮助,但也许将来会对其他人有所帮助。

我今天遇到了同样的问题,无法从谷歌搜索的任何结果中立即找到具体的工作示例,其中一个结果让我来到这里。经过几次尝试,我终于成功了。以下是一项工作任务:

war {
  filesMatching("**/foo/*.html") {
    filter(ReplaceTokens, tokens: [key: 'value'])
  }
}

链接:

您需要使用哪些不同类型的过滤器?我将使用第一个块,删除if并让gradle在所有文件上运行过滤器。您的第一个选项对我来说非常有用。请注意,您必须导入
ReplaceTokens
,例如,
import org.apache.tools.ant.filters.ReplaceTokens
此答案适用于
src/main/resources
中的文件,但不适用于问题标题中明确要求的
src/main/webapp
中的文件。