2017-07-09 78 views
1

創建一個ZIP目錄下"foo/bar"添加文件"hello/world.xml""hello/universe.xml"Gradle zip:如何輕鬆包含和重命名一個文件?

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

filesMatching(...)顯然會影響性能。 什麼是更好的方法?像:

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

rename沒有與include支持。

回答

2

我不明白你爲什麼使用filesMatching。您只在您的子女CopySpec中包含一個文件。只需將其重命名,一切都很好:

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

如果您要包括多個文件(甚至是複製所有),而只是要重命名其中的一個,指定哪些文件(S)使用正則表達式來重命名作爲第一個參數:

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))說: 「與源正則表達式不匹配的文件將被複製爲原始名稱。」所以我認爲任何比賽都足夠了。 –

相關問題