是否可以使用 gradle 任务从 http 位置复制文件
我尝试过这样的事情
task copyDatabaseFile(type: Copy) {
from 'http://somelocation/somedatabasefile.cdl';
into 'target location'
}
但这会导致
Cannot convert URL 'http://server.cequint.com/cdldb/uscc/cityid.cdl' to a file.
我找不到任何 gradle 示例做类似的事情
Gradle 不支持此功能。但 VFS 插件应该可以帮到你:https://plugins.gradle.org/plugin/org.ysb33r.vfs
您可以使用TextResource下载文件。
// build.gradle.kts
val gradleReadme: TextResource = resources.text.fromUri(
"https://raw.githubusercontent.com/gradle/gradle/master/README.md"
)
A
TextResource
可以用作任务的输入。在这里,我创建了一个任务,将文件下载到 src/main/resources/gradle_data
目录中。
// build.gradle.kts
val gradleReadme: TextResource = resources.text.fromUri(
"https://raw.githubusercontent.com/gradle/gradle/master/README.md"
)
val downloadGradleReadme by tasks.registering(Sync::class) {
from(gradleReadme) {
rename { "README.json" }
}
into("src/main/resources/gradle_data")
}
我必须手动设置文件名,因为
TextResource
没有文件支持。
在 Gradle 中使用 Ant“get”任务来下载文件很容易。
这是一个 Gradle(Kotlin 语言),它将 Gradle README.md 下载到构建目录中。它还将状态打印到控制台。
// build.gradle.kts
val downloadGradleReadme by tasks.registering {
val gradleReadmeUrl = "https://raw.githubusercontent.com/gradle/gradle/master/README.md"
inputs.property("gradleReadmeUrl", gradleReadmeUrl)
val outputDir = temporaryDir
outputs.dir(outputDir).withPropertyName("outputDir")
doLast {
val destinationFile = outputDir.resolve("readme.md")
ant.withGroovyBuilder {
"get"(
"src" to gradleReadmeUrl,
"dest" to destinationFile,
"verbose" to true,
)
}
logger.lifecycle("Downloaded Gradle README: ${destinationFile.readText()}")
}
}
ant.withGroovyBuilder(...)
立即运行,因此将其放在 doLast { ... }
块中非常重要,这样 Gradle 会在 执行阶段而不是配置阶段下载文件。
地图中可以使用的属性可以在 Ant get 任务文档中找到。
在 Gradle 中定义 Ant 任务有几种不同的方法。请参阅使用 Gradle 中的 Ant 了解更多一般信息。
您可以使用 groovy 从 url 下载并保存文件:
task downloadFile() << {
def address='url/to/download.ext'
def target='/path/tosave'
new File("${address.tokenize('/')[-1]}").withOutputStream { out ->
new URL(address).withInputStream { from -> out << from; }
}
}
如果您需要此任务始终在构建任务运行之前运行,您可以添加到您的 build.gradle:
build.dependsOn downloadFile