【发布时间】:2015-02-12 12:50:40
【问题描述】:
我想从 URL 下载一个 zip 文件(我的数据库)并将其解压缩到特定文件夹(例如资源)中。我想在我的项目构建 sbt 文件中执行此操作。 这样做的适当方法是什么? 我知道 sbt.IO 有解压和下载。我找不到一个使用下载的好例子(我发现那些不起作用)。 有什么 sbt 插件可以帮我做这个吗?
【问题讨论】:
我想从 URL 下载一个 zip 文件(我的数据库)并将其解压缩到特定文件夹(例如资源)中。我想在我的项目构建 sbt 文件中执行此操作。 这样做的适当方法是什么? 我知道 sbt.IO 有解压和下载。我找不到一个使用下载的好例子(我发现那些不起作用)。 有什么 sbt 插件可以帮我做这个吗?
【问题讨论】:
不清楚何时要下载和解压,所以我将使用TaskKey 进行。这将创建一个您可以从名为downloadFromZip 的 sbt 控制台运行的任务,它只会下载 sbt zip 并将其解压缩到临时文件夹:
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)
【讨论】: