2012-03-07 1 views
11

私はgradに変換するmavenをやっており、以下を実行する最善の方法についての意見を見たいと思っています。私は現在src/main/webappの下に複数のファイルを持っています。一方はフィルタリングが必要なものがあり、他方をフィルタリングする必要があるものもあります。src/main/webapp内のファイルのサブセットをフィルタリングするためのgradle方法はありますか?

src/main/webappの概念的には、htmlとバイナリを含むディレクトリfooと、webappの下にhtmlを含む他の多くのファイルがあります。私はfoo/* .htmlファイルだけをフィルタリングしたい。

war { 
    eachFile { 
    if(shouldFilter(it)) { 
     it.filter(ReplaceTokens, tokens: [key: 'value']) 
    } 
    } 
} 

def shouldFilter(input) { 
    input.path.contains('foo') && input.name.endsWith('.html') 
} 

またはデフォルト

war { 
    from('src/main/foo-pre-filter') { 
    into 'foo' 
    include '*.html' 
    filter(ReplaceTokens, tokens: [key: 'value']) 
    } 
} 

または私は逃した別のオプションがあることにより、コピーされていない独自のディレクトリに各サブセットを移動:私はどちらか私の想定元本build.gradleで

+0

フィルタにはどのような種類がありますか?私は最初のブロックを使用し、ifとletを削除して、すべてのファイルに対してフィルタを実行させます。 – Ethan

+0

ありがとうございました。あなたの最初のオプションは私のために素晴らしい仕事をしました。 –

答えて

13

私が質問を正しく理解していれば、ファイルマッチングを使用できます。また、私は戦争タスクとは対照的に、processResourcesタスクの一部として実行します。私は最初の質問は、2年前に頼まれたので、これはおそらくアスカーを助けにはなりませんが、おそらくそれは、将来的に他の誰かを助けることができる実現

processResources { 
    filesMatching('foo/*.html') { 
     filter(ReplaceTokens, tokens: [key: 'value']) 
    } 
} 

:それは次のようになります。

+4

'ReplaceTokens'をインポートする必要があることに注意してください。例えば、' import org.apache.tools.ant.filters.ReplaceTokens' – Leukipp

+0

この答えは 'src/main/resources'のファイルでは有効ですが、' src/main/webapp'と明記されています。 – Codo

+0

src/main/webappにあるファイルの解決策は何ですか? – KaviK

関連する問題