15

我有一些需要令牌替换的文件..而不是默认的单@,它们使用双@...所以我需要类似的东西:@@replaceme@@ ..被替换。

Ant 的 ReplaceTokens 过滤器允许您使用 BeginToken / EndToken 进行设置。虽然我不确定如何在我的示例中配置它:

copy{ 
  into something
  from somethingelse
  filter(ReplaceTokens, tokens: [])  
}

如何更改上述代码以使用双 @@ 标记而不是单个标记正确替换?

4

4 回答 4

14

更改分隔符很容易 - 只需添加命名参数beginTokenendToken方法filter调用。但是,AntReplaceTokens仅支持单字符分隔符。快速的网络搜索并没有FilterReader找到支持开箱即用的任意多字符分隔符的 Ant。另一种方法是自己编写代码,通过实现FilterReader或使用自由格式过滤器方法。

于 2012-04-25T19:40:00.037 回答
12

我处于类似(不确切)的情况。必须处理 Maven 格式的测试属性资源。即'${}' 格式。

当我转到 gradle 时,processTestResources 任务没有替换 ${} 中的值。这是因为它使用'@'单字符分隔的相同原因。我找到了一个 hack 来实现我想要的。

configure(tasks.processTestResources) {
    include '**/*.properties'
    filter(ReplaceTokens,
            tokens: ['$':'={'], beginToken : '=', endToken : '{')
    filter(ReplaceTokens,
            tokens: [project.properties], beginToken : '{', endToken : '}')
}
于 2014-02-04T21:50:04.170 回答
8

其他答案似乎很旧,并报告说您不能使用多字符标记分隔符。但我发现 Gradle 2.14.1 不再是这种情况

copy{ 
  into something
  from somethingelse
  filter(ReplaceTokens, tokens: [map], beginToken : '@@', endToken : '@@')
  // or, maven prop stle:
  // filter(ReplaceTokens, tokens: [map], beginToken : '${', endToken : '}')

}
于 2016-10-20T22:15:36.693 回答
0

这是另一个解决方案。使用 Ant 复制任务而不是 Gradle 复制任务。

task copyWithMultiCharTokenMark << {
    ant.copy(todir: 'copy_into_dir') {
        fileset(dir: 'copy_from_dir')
        filterset(begintoken:'@@', endtoken:'@@') {
            filter( token:'replaceme', value:'Am I replaced?')
        }
    }
}

我在搜索复制任务的文件编码问题的解决方法时发现了这种方式。

于 2015-08-16T12:52:59.953 回答