2017-07-09 15 views
1

"foo/bar"Gradle zip:ファイルを簡単にインクルードして名前を変更する方法は?

task myZip(type: Zip) { 
    from ("foo/bar") { 
     include "hello/world.xml" 
     filesMatching("hello/*") { 
      it.path = "hello/universe.xml" 
     } 
    } 
} 

"hello/universe.xml"として

filesMatching(...)ディレクトリの下のzipファイルの追加"hello/world.xml"を作成しますが、明らかにパフォーマンスに影響を与えます。 もっと良い方法はありますか?以下のような:

task myZip(type: Zip) { 
    from ("foo/bar") { 
     include ("hello/world.xml") { 
       rename "hello/universe.xml" 
     }   
    } 
} 

しかしrenameincludeでサポートされていません。

答えて

2

なぜfilesMatchingを使用しているのかわかりません。あなたの子供にはただ一つのファイルが含まれていますCopySpec。単純にその名前を変更し、すべてが正常である:

task myZip(type: Zip) { 
    from ('foo/bar') { 
     include 'hello/world.xml' 
     rename { 'hello/universe.xml' } 
    } 
} 

あなたが(偶数またはすべてをコピー)複数のファイルを含めたい場合は、だけそれらのいずれかの名前を変更したい場合は、どのファイル(複数可)を指定した正規表現に名前を変更します

task myZip(type: Zip) { 
    from 'foo/bar' 
    rename 'hello/world.xml' 'hello/universe.xml' 
} 
+0

正規表現では、ファイル名全体や、java string.replaceAll(pattern、replacement)で使用されているパターンと一致する必要がありますか?ありがとう。 – eastwater

+0

[docs](https://docs.gradle.org/3.3/javadoc/org/gradle/api/file/CopySpec.html#rename(java.lang.String、%20java.lang.String))は次のように言っています: msgstr "元の正規表現と一致しないファイルは元の名前でコピーされます。"だから私は一致が十分であると仮定します。 –

関連する問題