2014-04-03 4 views
5

Sto tentando di estrarre un file zip dipendente senza la directory PARENT, escludere alcuni file durante l'estrazione usando Gradle.Come estrarre senza prima la directory usando Gradle?

Ecco quello che ho e questo funziona, ma non mi sembra giusto e sto sperando che ci sia un modo migliore per fare questo file

Zip che sto estraendo

jar tf parent-folder-name.zip 


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

Opzione 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() 
    } 
} 

Opzione 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() 
} 

Per me Opzione 2 si sente meglio, ma io non sono sicuro se c'è un modo migliore per fare questo in Gradle?

+1

Basta un cross-link che la stessa questione è stata sollevata a Gradle forum - http: // forum. gradle.org/gradle/topics/how_to_extract_without_first_directory_using_gradle – Radim

risposta

0

Sembra che il tuo caso d'uso non sia ancora supportato in modo molto user-friendly. C'è una richiesta di funzionalità correlata elencata here.

C'è anche questo similar stackoverflow question che ha alcuni suggerimenti che sembrano più semplici delle opzioni che già possiedi.

Poiché gradle si integra bene con formica, e l'attività di decompressione della formica supporta l'appiattimento, è possibile fare affidamento anche su questo.

Per maggiori dettagli si veda: