Java Gradle:在自定义任务类中使用其他(非官方)任务?
假设我想在Java Gradle:在自定义任务类中使用其他(非官方)任务?,java,groovy,gradle,Java,Groovy,Gradle,假设我想在buildSrc/src/main/groovy/JDKDownloader.groovy中编写一个定制的Gradle任务,它可以下载任何版本的JavaJDK。它看起来像这样: class JDKDownloader extends DefaultTask { String version = getLatestJDKVersion() String dest = null; @TaskAction def download() { .
buildSrc/src/main/groovy/JDKDownloader.groovy
中编写一个定制的Gradle任务,它可以下载任何版本的JavaJDK。它看起来像这样:
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'
}
download {
src: 'someurl'
dest: 'somedir'
}
可以这样使用:
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'
}
download {
src: 'someurl'
dest: 'somedir'
}
现在,问题是:对于这个具体的例子,我想使用Gradle下载插件,因为它在下载文件时显示了一个很好的进度显示。但是如何在JDKDownloader中以适当的方式使用这个插件/任务呢?在普通渐变脚本中,必须执行以下操作:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'de.undercouch:gradle-download-task:0.5'
}
}
之后可以这样使用它:
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'
}
download {
src: 'someurl'
dest: 'somedir'
}
但是,我们如何从JDKDownloader
实现这一点呢?显然,要求类的用户自己应用下载插件,然后才能使用JDKDownloader
(丑陋的隐式依赖),这不是一个很好的解决方案。另一方面,JDKDownloader
会弄乱调用脚本的buildscript依赖项,这似乎很奇怪
那么,有没有更好的方法来实现这一点呢?如果您将插件发布为Maven或Ivy模块,可传递的依赖关系管理将处理其依赖关系。但是,如果我只想使用自定义任务类作为容器来保持整洁,而不是构建一个用于其他模块的插件,该怎么办?因此,我没有将所有JDK下载函数都放在build.gradle中,而是将它们放入JDKDownloader抽象中。然后,下载插件在
buildSrc/build.gradle
中成为常规编译或运行时依赖项,我想就是这样。