我在zip文件中有这个结构
classes
|--com: A.class, B.class
|--org: C.class, D.class
|--android: X.class
|--stuff: Stuff.inf, info.txt
我希望能够仅使用.class文件提取文件夹:com,org,android。把它们放在一个罐子里。 到目前为止,我已经这样做了:
task createJar {
//unzip the file
FileTree zip = zipTree('runtime.jar')
FileTree zip2 = zip.matching {
include 'classes/**/*.class'
}
zip2.each { file -> println "doing something with $file" }
//create the jar
jar{
from zip2
destinationDir file('GradleTests/testResult')
}
}
但我得到了包含classes文件夹的jar,例如:classes/org/apache/http/entity/mime/content/StringBody.class
我希望它像:org/apache/http/entity/mime/content/StringBody.class
任何想法如何? 谢谢!
答案 0 :(得分:2)
所以我认为有两件可以让你更接近你想要的东西:
zipTree
任务中使用jar
,而不是创建中间zip。eachFile
更改每个文件的相对路径以剥离第一个文件夹。 jar {
from zipTree('runtime.jar') {
include 'classes/**/*.class'
eachFile { it.relativePath = it.relativePath.segments[1..-1] }
}
}
Jar任务包含所有CopySpec方法,这些方法提供了eachFile功能。