gradle复制任务可以用来从url复制文件吗?

问题描述 投票:0回答:3

是否可以使用 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 android-gradle-plugin
3个回答
1
投票

Gradle 不支持此功能。但 VFS 插件应该可以帮到你:https://plugins.gradle.org/plugin/org.ysb33r.vfs


1
投票

文本资源服务

您可以使用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 了解更多一般信息。


0
投票

您可以使用 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

© www.soinside.com 2019 - 2024. All rights reserved.