Gradle-使用替换令牌时更改开始/结束令牌

Gradle-使用替换令牌时更改开始/结束令牌,gradle,Gradle,我有一些文件需要替换令牌。。而不是默认的单@,它们使用双@。。。所以我需要像这样的东西:@@replaceme@@@。。替换 Ant的ReplaceTokens筛选器允许您使用BeginToken/EndToken进行设置。。虽然我不确定如何在我的示例中配置它: copy{ into something from somethingelse filter(ReplaceTokens, tokens: []) } 如何更改上述代码以正确使用双@标记替换单标记?更改分隔符很容易-

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

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

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

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

更改分隔符很容易-只需将命名参数
beginToken
endToken
添加到
筛选器
方法调用中即可。但是,Ant的
replaceToken
仅支持单字符分隔符。快速web搜索没有找到支持任意多字符定界符的Ant
FilterReader
。另一种方法是自己编写代码,要么实现
FilterReader
,要么使用自由格式方法。

我也遇到过类似(不确切)的情况。必须处理maven格式的测试属性资源。i、 e'${}'格式

当我转到gradle时,processTestResources任务没有替换${}中的值。这与它使用“@”单字符分隔的原因相同。我找到了一种方法来实现我想要的

configure(tasks.processTestResources) {
    include '**/*.properties'
    filter(ReplaceTokens,
            tokens: ['$':'={'], beginToken : '=', endToken : '{')
    filter(ReplaceTokens,
            tokens: [project.properties], beginToken : '{', endToken : '}')
}

这是另一个解决方案。使用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?')
        }
    }
}

task copyWithMultiCharTokenMark其他答案似乎很旧,并且报告您不能使用多字符标记分隔符。但我发现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 : '}')

}

美好的错过了对非单字符分隔符的支持,这可能就是我的代码不起作用的原因。完全是hack-y,完全有效!我正在使用/*@TOKEN@*/格式化的令牌,以便它们在CSS/JS中的任何地方都有效,下面的技巧是:
过滤器(org.apache.tools.ant.filters.ReplaceTokens,令牌:['*':'@'],beginToken:'/',endToken:'@')
过滤器(org.apache.tools.ant.filters.ReplaceTokens,令牌:['*':'@',endToken:'/']
这应该是可以接受的答案,因为无论哪个版本进行了允许非单字符delimeters的更改!