Gradle:在自定义任务类中使用其他(非官方)任务?

时间:2014-02-24 13:14:23

标签: java groovy gradle

假设我想在buildSrc/src/main/groovy/JDKDownloader.groovy中编写自定义Gradle任务,可以下载任何版本的Java JDK。它看起来像这样:

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'
}

现在,问题是:对于这个具体的例子,我想使用Gradle下载插件here,因为它在下载文件时显示了一个很好的进度显示。但是如何在JDKDownloader中以合理的方式使用这个插件/任务?在普通的Gradle脚本中,必须执行此操作:

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

之后可以像这样使用它:

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

但是,我们如何从JDKDownloader执行此操作?显然,在他可以使用JDKDownloader(丑陋的隐式依赖)之前,要求类的用户自己应用下载插件并不是一个很好的解决方案。另一方面,JDKDownloader应该混淆调用脚本的buildscript依赖项似乎很奇怪。

那么有更好的(有利的)方法吗?

1 个答案:

答案 0 :(得分:0)

如果您将插件发布为Maven或Ivy模块,则传递依赖关系管理将负责其依赖性。