Gradle在构建过程中替换文件中的标记

mar*_*vic 6 build.gradle

我有一个Web应用程序,我使用gradle来构建它.在WEB-INF文件夹(src/main/webapp/WEB-INF/my.xml)中的一个xml文件中,我有一块需要替换的文件.

<system-properties>
    <property name="clientId" value="@clientId@" />
</system-properties>
Run Code Online (Sandbox Code Playgroud)

当我尝试使用以下值替换令牌时:

processResources{
  filter(ReplaceTokens, tokens:['clientId': 'test'])
}
Run Code Online (Sandbox Code Playgroud)

比我gradle build在输出文件中运行令牌时(./build/exploded-app/WEB-INF/my.xml)没有更换.我想知道哪个是正确的方法呢?

小智 6

问题是您正在配置错误的任务.processResources只复制src/main/resources中的文件(或者你在主sourceSet中定义的任何其他文件作为资源),而war复制/压缩你的任务my.xml.

war {
  filter(ReplaceTokens, tokens:['clientId': 'test'])
}
Run Code Online (Sandbox Code Playgroud)

  • 注意`ReplaceTokens`需要将`import org.apache.tools.ant.filters.ReplaceTokens`添加到`build.gradle`.有关详细信息和另一个示例,请参阅[复制DSL文档](https://gradle.org/docs/current/dsl/org.gradle.api.tasks.Copy.html). (4认同)
  • 我该怎么做**仅针对特定的文件扩展名**,例如`*.xml`? (4认同)