2014-02-24 90 views
0

假設我想編寫一個定製的Gradle任務buildSrc/src/main/groovy/JDKDownloader.groovy,它可以下載任何版本的Java JDK。它看起來是這樣的:Gradle:在自定義任務類中使用其他(非官方)任務?

class JDKDownloader extends DefaultTask { 
    String version = getLatestJDKVersion() 
    String dest = null; 

    @TaskAction 
    def download() { 
     .. code to download JDK .. 
    } 

    private String getLatestJDKVersion() { 
     .. code to find latest JDK version .. 
    } 
} 

人們可以使用這樣的:

task downloadJDK16(type: JDKDownloader) { 
    version = '1.6' 
    dest = 'jdkDownload' 
} 

現在的問題是:這個具體的例子我想使用的搖籃下載插件here,因爲它顯示下載文件時顯示一個很好的進度。但是,如何在JDKDownloader內以一種合適的方式使用這個插件/任務?在一個正常的搖籃腳本一個人做到這一點:

buildscript { 
    repositories { 
     mavenCentral() 
    } 
    dependencies { 
     classpath 'de.undercouch:gradle-download-task:0.5' 
    } 
} 

之後,可以使用這樣的:

download { 
    src: 'someurl' 
    dest: 'somedir' 
} 

但是,我們如何做到這一點從JDKDownloader?顯然,在他可以使用JDKDownloader(難看的隱式依賴)之前,要求該類的用戶自己應用下載插件並不是一個很好的解決方案。另一方面,看起來很奇怪JDKDownloader應該與調用腳本的buildscript依賴關係混淆。

那麼有沒有更好的方法來做到這一點?

回答

0

如果您將插件作爲Maven或Ivy模塊發佈,則傳遞依賴關係管理將處理其依賴關係。

+0

但是,如果我只是想使用自定義任務類作爲容器來保持事物清潔,而不是構建一個旨在用於其他模塊的插件呢?因此,我沒有在我的build.gradle中包含所有JDK下載函數,而是將它們放入JDKDownloader抽象中。 – johnrl

+0

然後下載插件變成'buildSrc/build.gradle'中的常規編譯或運行時依賴項,我想就是這樣。 –

相關問題