我想从战争中提取一些罐子作为我的gradle(2.0)构建的一部分。 到目前为止,我有这个:
task unzip(type: Copy) {
def zipFile = file('D:/external/dependent.war')
def outputDir = file('lib')
from zipTree(zipFile)
into outputDir
include 'WEB-INF/lib/*.jar'
}
这将WEB-INF / lib目录放在outputDir中。 我只想把罐子弄平。
要在Ant中执行此操作,我会这样做:
<target name="unzip">
<unzip src="D:/external/dependent.war" dest="lib">
<patternset>
<include name="WEB-INF/lib/*.jar"/>
</patternset>
<mapper type="flatten"/>
</unzip>
</target>
我如何在gradle中完成?
答案 0 :(得分:6)
我相信您只需将.files
附加到zipTree
。
task unzip(type: Copy) {
def zipFile = file('D:/external/dependent.war')
def outputDir = file('lib')
from zipTree(zipFile).files
into outputDir
include 'WEB-INF/lib/*.jar'
}
答案 1 :(得分:3)
似乎这是Gradle http://issues.gradle.org/browse/GRADLE-3025
中的错误/缺失功能现在我不得不委托好老的可靠的Ant来做这项工作!
task unzip(){
ant.unzip(src: 'D:/external/dependent.war', dest:'lib', overwrite:"true") {
patternset( ) {
include( name: 'WEB-INF/lib/*.jar' )
}
mapper(type:"flatten")
}
}
答案 2 :(得分:3)
我尝试了Al J的答案,但它没有使用包含。
这对我有用:
task unzip(type: Copy) {
def zipFile = file('D:/external/dependent.war')
def outputDir = file('lib')
from zipTree(zipFile).matching{include 'WEB-INF/lib/*.jar'}.files
into outputDir
}
答案 3 :(得分:2)
Gradle似乎有办法。虽然它更复杂,但不一定那么明显。
task unzip(type: Copy) {
def zipFile = file('D:/external/dependent.war')
def outputDir = file('lib')
from zipTree(zipFile)
into outputDir
include '**/*.jar'
includeEmptyDirs false
eachFile { FileCopyDetails fcp ->
// remap the file to the root
String[] segments = [fcp.getName()]
fcp.relativePath = new RelativePath(true, segments)
}
}
includeEmptyDirs false
确保不会复制额外的目录。
eachFile
块会使结构变平(您必须将名称放入数组才能使其正常工作)。