在gradle copy任务中设置filter()调用的编码

RAn*_*s00 4 groovy character-encoding gradle

假设我的样本groovy代码build.gradle:

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

task doSomeFiltering(type: Copy) {
    from 'some/directory'
    into 'some/target'

    filter(ReplaceTokens, tokens: [SAMPLE: '123abc456'])
}
Run Code Online (Sandbox Code Playgroud)

如果我在复制和过滤的文件中有一些Unicode字符,它们将在输出文件中变为系统默认编码,如果使用特定于unicode的字符并且预期文件保持unicode,则会产生一些大问题.

所以问题是:这个示例代码不遵循自定义编码选择,它总是默认为系统默认值,用于在过滤后输出文件.如何设置过滤器使用的Reader/Writer的编码?

是否可以解决此限制,例如直接调用Apache Ant?

RAn*_*s00 9

在版本2.14之前,Gradle本身不支持指定过滤器调用的编码.从Gradle 2.14开始,您可以使用任务的filteringCharset属性Copy,如下所示:

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

task doSomeFiltering(type: Copy) {
    from 'some/directory'
    into 'some/target'

    filteringCharset = 'UTF-8'

    filter(ReplaceTokens, tokens: [SAMPLE: '123abc456'])
}
Run Code Online (Sandbox Code Playgroud)