在sbt 0.10下收集依赖项(将所有依赖项jar放到target / scala-version / lib /)

时间:2011-09-08 16:18:17

标签: scala sbt

我正在使用sbt 0.10和Scala 2.9.1。

我读过 http://groups.google.com/group/simple-build-tool/browse_thread/thread/792e5360877e78/987b6af687b8e33b?lnk=gst&q=collect+jars#987b6af687b8e33b

但是我不想要一个巨大的罐子。我只想要依赖罐子 最终在target / scala-2.9.1.final / lib目录中。

我之所以不想要一个巨大的jar,那个项目使用了很多 libs,通常只有应用程序.jar发生变化。不过就这样 是多语言项目,并非所有团队成员都有scala或sbt, 罐子只是承诺给git。有一个巨大的dar更新了规则 会膨胀回购规模。

如何复制这些依赖项? ;)

3 个答案:

答案 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。