2014-04-11 26 views
14

Jaki byłby właściwy sposób pobierania i rozpakowywania pliku z adresu URL (http)?gradle - pobierz i rozpakuj plik z adresu URL

Jeśli to możliwe, chciałbym zapobiec ponownemu pobieraniu za każdym razem, gdy uruchomię zadanie (w ant.get można uzyskać przez skipexisting: 'true').

Mój obecny rozwiązaniem byłoby:

task foo { 
    ant.get(src: 'http://.../file.zip', dest: 'somedir', skipexisting: 'true') 
    ant.unzip(src: 'somedir' + '/file.zip', dest: 'unpackdir') 
} 

wciąż będę oczekiwać rozwiązania ant-free. Masz szansę to osiągnąć?

+2

Nie zapomnij owinąć część wykonanie zadania z 'doLast {...}' (ten sam błąd co w poprzednim pytaniu). –

+0

~~ BOUNTY ~~ Czy ktoś może podać przykład poniższej odpowiedzi: "jeśli chcesz skorzystać z funkcji rozwiązywania/buforowania zależności Gradle, udając, że jest to repozytorium Ivy z niestandardowym URL-em artefaktu"? – CMPS

+0

Co jest nie tak z mrówką? Naprawdę lubię twoje rozwiązanie! –

Odpowiedz

7

Obecnie nie ma interfejsu API Gradle do pobrania z adresu URL. Możesz to zaimplementować za pomocą Ant, Groovy lub, jeśli chcesz skorzystać z funkcji rozwiązywania/buforowania zależności Gradle, udając, że jest to repozytorium Ivy z niestandardowym URL-em artefaktu. Rozpakowanie można wykonać w zwykły sposób metodą Gradle (copy lub Copy).

+4

Byłbym wdzięczny za przykład ... Jestem totalną nowicjuszką! – xpmatteo

+3

~~ BOUNTY ~~ Czy ktoś może podać przykład tej odpowiedzi "jeśli chcesz skorzystać z funkcji rozwiązywania/buforowania zależności Gradle, udając, że jest to repozytorium Ivy z niestandardowym URL-em artefaktu"? – CMPS

+0

@ CMPS, dlaczego nie masz groovy? – RaGe

28

@CMPS:

Więc powiedzmy, że chcesz, aby pobrać ten plik zip jako zależność:

https://github.com/jmeter-gradle-plugin/jmeter-gradle-plugin/archive/1.0.3.zip 

Zdefiniujesz repozytorium bluszczu jako:

repositories { 
    ivy { 
     url 'https://github.com/' 
     layout 'pattern', { 
      artifact '/[organisation]/[module]/archive/[revision].[ext]' 
     } 
    } 
} 

a następnie użyć go jako: zadania unzip

dependencies { 
    compile 'jmeter-gradle-plugin:jmeter-gradle-plugin:[email protected]' 
    //This maps to the pattern: [organisation]:[module]:[revision]:[classifier]@[ext]   
} 

finansowania zewnętrznego @Matthias', oprócz podnoszenia zip z Gradle cache:

task unzip(type: Copy) { 

    def zipPath = project.configurations.compile.find {it.name.startsWith("jmeter") } 
    println zipPath 
    def zipFile = file(zipPath) 
    def outputDir = file("${buildDir}/unpacked/dist") 

    from zipTree(zipFile) 
    into outputDir 
} 
+0

Fajnie, próbuję tego teraz .. – CMPS

+0

Działa jak urok! Dziękujemy – CMPS

+0

@RaGe jak 1.0.3: klasa @ zip zostaje dopasowana do [wersji]. [Ext]? – addy