2017-07-09 72 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))说: “与源正则表达式不匹配的文件将被复制为原始名称。”所以我认为任何比赛都足够了。 –

相关问题