如何使用sbt下载依赖项?对于maven,它是:
mvn dependency:get
sbt中有模拟吗?
答案 0 :(得分:0)
不幸的是,没有单个sbt
命令可用于此目的。但是,sbt
提供了一个dependencyResolution
任务密钥,可用于实现custom task从存储库中下载单个jar。
这是一个示例实现(将其添加到build.sbt
中):
lazy val downloadArtifact = taskKey[Unit]("Download an artifact")
downloadArtifact := {
val module = "com.typesafe.scala-logging" %% "scala-logging" % "3.9.2"
val dr = dependencyResolution.value
val files = dr.retrieve(
dr.wrapDependencyInModule(module exclude("*", "*")),
retrieveDirectory = new File("target"),
log = (streams in Compile).value.log
).fold(e => throw e.resolveException, identity(_))
println(files)
}
注意事项:
retrieveDirectory
参数(请参见https://github.com/sbt/sbt/issues/5465)。这意味着即使API假定下载的文件也不会放入retrieveDirectory
中。您可以禁用coursier并改用常春藤(useCoursier := false
),也可以将文件自己复制到所需的目的地(上面的files
值为下载文件的List[java.io.File]
。注意:
DependencyResolution.retrieve
下载工件及其所有依赖项。这就是为什么在上面添加exclude("*", "*")
的原因-仅下载工件本身并排除其所有依赖项。
即使您检索单个依赖项,使用coursier时,此函数也可能会生成多个文件位置的列表(我认为这是由于依赖项解析逻辑的特殊性)。您可以使用列表中的任何文件,因为通常它们都指向同一文件。
由于此实现使用sbt的dependencyResolution
,因此它尊重您可能在sbt项目中声明的所有自定义解析器(自定义存储库)。
最后,尽管它没有与sbt
集成在一起,但是也许值得一提的是,如果您恰好安装了coursier,则可以使用coursier fetch:
cs fetch com.typesafe.scala-logging::scala-logging:3.9.2
答案 1 :(得分:-1)