2014-04-03 10 views
5

Ich versuche, eine abhängige Zip-Datei ohne das PARENT-Verzeichnis zu extrahieren, einige Dateien beim Extrahieren mit Gradle auszuschließen. HierWie extrahiert man ohne erstes Verzeichnis mit Gradle?

ist, was ich habe und das funktioniert aber fühlt sich nicht richtig und ich hoffe, es gibt einen besseren Weg, um dieses

Zip-Datei zu tun, die ich

jar tf parent-folder-name.zip 


parent-folder-name/bin/something.sh 
parent-folder-name/bin/something.bat 
parent-folder-name/lib/somelib.jar 
am Extrahieren

Option 1

task explodeToDist1(type: Copy) { 
    from zipTree(configurations.extractDist.singleFile) 
    exclude "**/lib/**" 
     eachFile { 
      def newPath = it.relativePath.segments[1..-1].join("/") 
      it.relativePath = RelativePath.parse(true, newPath) 
     } 
    into 'build/dist' 
    doLast { 
     def path = buildDir.getPath() + "/dist/parent-folder-name" 
     def dirToDelete = new File(path) 
     dirToDelete.deleteOnExit() 
    } 
} 

Option 2

task explodeToDist2 << { 
     def unzipDir = new File('build/unzipTmp') 
     copy { 
      from zipTree(configurations.extractDist.singleFile) 
      into unzipDir 
     } 
     def rootZipDir = unzipDir.listFiles()[0] 
     fileTree(rootZipDir){ 
       exclude "**/lib/**" 
     }.copy { 
      into 'src/dist' 
     } 
     unzipDir.deleteDir() 
} 

Für mich Option 2 fühlt sich besser, aber ich bin nicht sicher, ob es ein besserer Weg, dies zu tun in Gradle?

+1

Nur vernetzen, dass die gleiche Frage auf Gradle Forum angesprochen wurde - http: // Foren. grdle.org/gradle/topics/how_to_extract_without_first_directory_using_gradle – Radim

Antwort

0

Scheint, dass Ihr Anwendungsfall noch nicht in einer sehr benutzerfreundlichen Weise in Gradle unterstützt wird. Es ist eine verwandte Feature-Anforderung aufgelistet here.

Dort auch diese similar stackoverflow question, die ein paar Vorschläge hat, die einfacher aussehen als die Optionen, die Sie bereits haben.

Da Gradle gut in ant integriert ist und die Ant-Unzip-Task die Abflachung unterstützt, können Sie sich darauf verlassen.

Weitere Informationen finden Sie unter: