Скачать zip из url и извлечь его в ресурс с помощью SBT

Я хочу загрузить zip файл (мою базу данных) из URL-адреса и извлечь его в определенную папку (например, ресурс). Я хочу сделать это в моем файле сборки проекта sbt. Каким будет подходящий способ сделать это? Я знаю, что sbt.IO распаковывает и загружает файлы. Я не мог найти хороший пример, который использует загрузку (те, которые я нашел, не работали). Есть ли какой-нибудь sbt-плагин для этого?

Ответ 1

Непонятно, когда вы хотите скачать и извлечь, поэтому я собираюсь сделать это с помощью TaskKey. Это создаст задачу, которую вы можете запустить из консоли sbt с именем downloadFromZip, которая просто загрузит zbt zip и распакует ее в папку temp:

lazy val downloadFromZip = taskKey[Unit]("Download the sbt zip and extract it to ./temp")

downloadFromZip := {
    IO.unzipURL(new URL("https://dl.bintray.com/sbt/native-packages/sbt/0.13.7/sbt-0.13.7.zip"), new File("temp"))
}

Эта задача может быть изменена для запуска только один раз, если путь уже существует:

downloadFromZip := {
    if(java.nio.file.Files.notExists(new File("temp").toPath())) {
        println("Path does not exist, downloading...")
        IO.unzipURL(new URL("https://dl.bintray.com/sbt/native-packages/sbt/0.13.7/sbt-0.13.7.zip"), new File("temp"))
    } else {
        println("Path exists, no need to download.")
    }
}

И чтобы запустить его при компиляции, добавьте эту строку в build.sbt (или параметры проекта в Build.scala).

compile in Compile <<= (compile in Compile).dependsOn(downloadFromZip)