2016-11-23 20 views
0

私はgradleプロジェクトで特定のJavaリソースをフィルタリングしたいと思います。一部のファイルが内容だけを置き換える必要がある場合、一部のファイルの名前を変更する必要があります(内容が異なる場合)。gradle processresources異なる置き換えと名前の変更ルール

マイGradleのJavaプロジェクトの設定は次のとおりです。

> ls build/resources/main 
file_c.txt 

> cat build/resources/main/file_c.txt 
my name is fool 
test zzz 

私はしかしリクたい:

Gradleの私が手

を構築:実行したら、

> cat build.gradle 
apply plugin: 'java' 
sourceSets { 
    main { 
     java { 
      resources { 
       srcDirs = [ "foo" ] 
       include '**/**' 
      } 
     }  
    } 
} 

processResources { 
    include '**/file_a.txt' 
    filter { String line -> 
     line 
      .replace("foo", "fool") 
     } 
} 


processResources { 
    include '**/file_b.txt' 
    rename { "file_c.txt" } 
    filter { String line -> 
     line 
      .replace("ipsum", "zzz") 
     } 
}           

> cat foo/file_a.txt 
my name is foo 
test ipsum 

> cat foo/file_b.txt 
lorem ipsum ... 

両方のファイルを取得するには、file_b.txtの名前が変更され、両方が特定のルールに置き換えられます。それを達成するための適切な方法は何ですか?

apply plugin: 'java' 
sourceSets { 
    main { 
     java { 
      resources { 
       srcDirs = [ "foo" ] 
       include '**/**' 
       exclude '**/*.txt' 
      } 
     }  
    } 
} 

processResources { 
    with copySpec { 
     from 'foo/file_a.txt' 
     filter { String line -> 
      line 
       .replace("foo", "fool") 
      } 
    } 

    with copySpec { 
     from 'foo/file_b.txt' 
     rename { "file_c.txt" } 
     filter { String line -> 
      line 
       .replace("ipsum", "zzz") 
      } 
    } 
} 

答えて

0

OKは、期待通りに動作しているようだ、以下、ソリューションを自分自身を発見しました。すなわちsrc/main/resourcesおよびsrc/main/filteredResources。私もあなたが除外を避けるべきである(例えばexclude '**/*.txt'resourcesfilteredResourcesディレクトリjarファイルになってしまいますものだけを含まなければならない事... ELSE NOTHING

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

processResources { 
    with copySpec { 
     from 'src/main/filteredResources' 
     filter(ReplaceTokens, tokens: [foo: 'fool', ipsum: 'zzz']) 
    } 
} 

上記のスニペットは、内のすべてのファイルで@[email protected]@[email protected]を交換しますsrc/main/filteredResourcesフォルダ

0

は、私は、個人的に、資源、そして濾過したリソースを別々に維持されるべきであると思う:

+0

私はあなたの意見を見ていますが、私は特定のファイルの特定のものをフィルタリングする必要があります。さらに、特定のファイルの名前を変更する必要があります –

+0

あなたのユースケースを完全にgrokしてください。ターゲットファイルとテンプレートを正確に同じ名前にすることができないのはなぜですか?あなたは[freemarker](http://freemarker.org/)や[velocity](https://velocity.apache.org/)のようなテンプレート言語の使用を検討しましたか? –

関連する問題