我正在使用sbt 0.10和Scala 2.9.1。
但是我不想要一个巨大的罐子。我只想要依赖罐子 最终在target / scala-2.9.1.final / lib目录中。
我之所以不想要一个巨大的jar,那个项目使用了很多 libs,通常只有应用程序.jar发生变化。不过就这样 是多语言项目,并非所有团队成员都有scala或sbt, 罐子只是承诺给git。有一个巨大的dar更新了规则 会膨胀回购规模。
如何复制这些依赖项? ;)
答案 0 :(得分:14)
您没有指定复制配置的常春藤配置,但这里是一个完整的示例,它将所有您的托管依赖项复制到target/<scala version>/lib
文件夹(scala版本由crossTarget任务)。只需将其复制并放入文件project/Build.scala
(或您想要的任何文件名):
import sbt._
import Keys._
object MyBuild extends Build {
lazy val copyDependencies = TaskKey[Unit]("copy-dependencies")
def copyDepTask = copyDependencies <<= (update, crossTarget, scalaVersion) map {
(updateReport, out, scalaVer) =>
updateReport.allFiles foreach { srcPath =>
val destPath = out / "lib" / srcPath.getName
IO.copyFile(srcPath, destPath, preserveLastModified=true)
}
}
lazy val root = Project(
"root",
file("."),
settings = Defaults.defaultSettings ++ Seq(
copyDepTask
)
)
}
如果您需要特定配置,请替换
<{>}updateReport.allFiles
updateReport.select(configuration = Set("compile"))
或您想要的任何常春藤配置。
答案 1 :(得分:1)
各种“Classpath”键包含在类路径上的不同视图,但最简单的方法是修改sbt-assembly插件以简单地将jar放入目录而不是执行解压缩/重新压缩循环。该插件非常小(只有150行),从粗略的一瞥可以看出正确的改变位置是非常明显的。
答案 2 :(得分:1)
请参阅任务xitrum-package: https://github.com/ngocdaothanh/xitrum/blob/master/plugin/src/main/scala/XitrumPlugin.scala
它将所有依赖项复制到目录target / xitrum_package。