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依賴關係混淆。
那麼有沒有更好的方法來做到這一點?
但是,如果我只是想使用自定義任務類作爲容器來保持事物清潔,而不是構建一個旨在用於其他模塊的插件呢?因此,我沒有在我的build.gradle中包含所有JDK下載函數,而是將它們放入JDKDownloader抽象中。 – johnrl
然後下載插件變成'buildSrc/build.gradle'中的常規編譯或運行時依賴項,我想就是這樣。 –