在gradle中提取文件夹并创建一个jar

时间:2012-07-25 13:59:58

标签: plugins gradle

我在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

任何想法如何? 谢谢!

1 个答案:

答案 0 :(得分:2)

所以我认为有两件可以让你更接近你想要的东西:

  1. 直接在zipTree任务中使用jar,而不是创建中间zip。
  2. 使用eachFile更改每个文件的相对路径以剥离第一个文件夹。
  3. jar {
      from zipTree('runtime.jar') {
        include 'classes/**/*.class'
        eachFile { it.relativePath = it.relativePath.segments[1..-1] }
      }
    }
    

    Jar任务包含所有CopySpec方法,这些方法提供了eachFile功能。