0

この構造は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.classorg/apache/http/entity/mime/content/StringBody.class

方法はありますか?ありがとう!

4

1 に答える 1

2

したがって、あなたが望むものに近づくことができる主なことが2つあると思います。

  1. 中間の zip を作成するのではなくzipTree、タスクで直接使用します。jar
  2. eachFile各ファイルの相対パスを変更して最初のフォルダーを取り除くために使用します。
jar {
  from zipTree('runtime.jar') {
    include 'classes/**/*.class'
    eachFile { it.relativePath = it.relativePath.segments[1..-1] }
  }
}

Jar タスクには、eachFile 機能を提供するすべてのCopySpecメソッドがあります。

于 2012-07-28T17:26:58.903 に答える