我有一个gradle项目,需要使用http在互联网上的某个地方提供一些数据文件。目标是这个不可变的远程文件在第一次构建时被拉出一次。后续构建不应再次下载。
如何指示gradle将给定文件提取到本地目录?
我试过
task fetch(type:Copy) {
from 'http://<myurl>'
into 'data'
}
但似乎复制任务类型无法处理http。
加分问题:有没有办法像wget -c
一样恢复以前中止/中断的下载?
答案 0 :(得分:45)
如何:
def f = new File('the file path')
if (!f.exists()) {
new URL('the url').withInputStream{ i -> f.withOutputStream{ it << i }}
}
答案 1 :(得分:26)
您可以使用Ant task Get来实现此目的。我相信这个Ant任务不支持恢复下载。
为此,您可以创建名为MyDownload
的自定义任务。这基本上可以是任何类名。此自定义任务定义输入和输出,用于确定是否需要执行任务。例如,如果文件已下载到指定目录,则该任务将标记为“最新”。在内部,此自定义任务通过内置Get
使用Ant任务AntBuilder
。
使用此自定义任务,您可以创建类型为MyDownload
的新增强任务(您的自定义任务类)。此任务设置输入和输出属性。如果您希望执行此任务,请将其连接到您通常通过任务依赖项运行的任务(dependsOn
方法)。以下代码段应该为您提供了这个想法:
task downloadSomething(type: MyDownload) {
sourceUrl = 'http://www.someurl.com/my.zip'
target = new File('data')
}
someOtherTask.dependsOn downloadSomething
class MyDownload extends DefaultTask {
@Input
String sourceUrl
@OutputFile
File target
@TaskAction
void download() {
ant.get(src: sourceUrl, dest: target)
}
}
答案 2 :(得分:14)
尝试这样:
plugins {
id "de.undercouch.download" version "1.2"
}
apply plugin: 'java'
apply plugin: 'de.undercouch.download'
import de.undercouch.gradle.tasks.download.Download
task downloadFile(type: Download) {
src 'http://localhost:8081/example/test-jar-test_1.jar'
dest 'localDir'
}
您可以在此处查看更多内容:https://github.com/michel-kraemer/gradle-download-task
对我来说工作得很好..
答案 3 :(得分:2)
刚刚在gradle论坛上遇到了post on upcoming download task。
看起来对我来说是完美的解决方案..虽然
答案 4 :(得分:2)
Ben Manes评论中的建议具有以下优势:它可以利用maven坐标和maven依赖性解析。例如,下载Derby jar:
定义新配置:
configurations {
derby
}
在依赖项部分中,为自定义配置添加一行
dependencies {
derby "org.apache.derby:derby:10.12.1.1"
}
然后你可以添加一个任务,在需要的时候拉下正确的文件(同时利用maven缓存):
task deployDependencies() << {
String derbyDir = "${some.dir}/derby"
new File(derbyDir).mkdirs();
configurations.derby.resolve().each { file ->
//Copy the file to the desired location
copy {
from file
into derbyDir
// Strip off version numbers
rename '(.+)-[\\.0-9]+\\.(.+)', '$1.$2'
}
}
}
(我从https://jiraaya.wordpress.com/2014/06/05/download-non-jar-dependency-in-gradle/了解到这一点。)
答案 5 :(得分:0)
使用以下插件:
plugins {
id "de.undercouch.download" version "3.4.3"
}
对于仅下载目的的任务
task downloadFile(type: Download) {
src DownloadURL
dest destDir
}
在任务中包含下载选项:
download {
src DownloadURL
dest destDir
}
对于在任务中包含多次下载的下载选项:
task downloadFromURLs(){
download {
src ([
DownloadURL1,
DownloadURL2,
DownloadURL3
])
dest destDir
}
}
希望对您有所帮助:)
答案 6 :(得分:0)
@Benjamin的答案的科特琳版
1.2.0