15

トークンの置換が必要なファイルがいくつかあります..デフォルトの単一の@の代わりに、それらは二重の@を使用します...したがって、次のようなものが必要です: @@replaceme@@ ..

Ant の ReplaceTokens フィルターを使用すると、BeginToken / EndToken を使用して設定できます。ただし、私の例では設定方法がわかりません。

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

上記のコードを変更して、単一のトークンではなく二重の @@ トークンで正しく機能するようにするにはどうすればよいですか?

4

4 に答える 4

14

区切り文字の変更は簡単です。名前付きパラメーターbeginTokenをメソッド呼び出しendTokenに追加するだけです。filterただし、AntReplaceTokensは 1 文字の区切り記号しかサポートしていません。FilterReaderWeb をすばやく検索しても、すぐに使用できる任意の複数文字の区切り記号をサポートする Ant は見つかりませんでした。FilterReader別の方法として、自由形式のフィルターメソッドを実装するか使用して、これを自分でコーディングすることもできます。

于 2012-04-25T19:40:00.037 に答える
12

私は似たような(正確ではない)状況にありました。Maven 形式のテスト プロパティ リソースを処理する必要がありました。つまり、'${}' 形式です。

Gradle に移行したとき、processTestResources タスクは ${} の値を置き換えませんでした。これは、'@' 単一文字区切りを使用するのと同じ理由によるものです。私が望んでいたことを達成するためのハックを見つけました。

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

ここに別の解決策があります。Gradle コピー タスクの代わりに Ant コピー タスクを使用します。

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 に答える