2014-04-11 43 views
14

從url(http)下載和解壓縮文件的正確gradle方式是什麼?gradle - 從url下載並解壓縮文件

如果可能的話,我想防止每次運行任務時重新下載(在ant.get可以通過skipexisting: 'true'實現)。

我目前的解決辦法是:

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

還在,我預計免費螞蟻的解決方案。有什麼機會實現這一目標?

+2

不要忘了包執行部與'doLast {...}'的任務相同(與上一個問題相同的錯誤)。 –

+0

~~ BOUNTY ~~任何人都可以爲下面的答案提供一個例子:「如果你想從Gradle的依賴解析/緩存功能中受益,假裝它是一個帶有自定義工件URL的Ivy倉庫」? – CMPS

+0

螞蟻怎麼了?我其實很喜歡你的解決方案! –

回答

7

目前沒有用於從URL下載的Gradle API。您可以使用Ant,Groovy或者如果您想從Gradle的依賴關係解析/緩存功能中獲益,可以假裝它是具有自定義工件URL的Ivy存儲庫。解壓縮可以用通常的Gradle方式(copy方法或Copy任務)完成。

+4

我將不勝感激一個例子...我是一個總的gradle新手! – xpmatteo

+3

~~ BOUNTY ~~任何人都可以爲這個答案提供一個例子「如果你想從Gradle的依賴解析/緩存功能中受益,通過假裝它是一個帶有自定義工件URL的Ivy存儲庫」? – CMPS

+0

@CMPS爲什麼你沒有groovy? – RaGe

28

@CMPS:

因此,可以說你要下載這個zip文件作爲一個依賴:

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

您將您的常春藤回購定義爲:

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

,然後用它作爲:

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

借款@Matthias'解壓任務,除了從gradle這個緩存拿起郵編:

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

很酷,我正在嘗試這個.. – CMPS

+0

工程就像一個魅力!謝謝 – CMPS

+0

@RaGe 1.0.3:class @ zip如何與[revision]。[ext]匹配? – addy

相關問題