2014-02-24 57 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'中的常规编译或运行时依赖项,我想就是这样。 –

相关问题