【问题标题】:Tell SBT to collect all my dependencies together告诉 SBT 将我所有的依赖项收集在一起
【发布时间】:2014-09-01 05:38:19
【问题描述】:

在构建 Web 应用程序时,SBT 能够将我所有的 jar 依赖项收集到 WAR 文件中。

这是否可以让 SBT 将我在非 Web 应用程序中依赖的所有 jar 放入一个目录中,以便在运行应用程序时轻松地将它们放到我的类路径中?

【问题讨论】:

  • 我希望有一个命令可以创建 one 具有所有依赖项的 jar。

标签: scala sbt


【解决方案1】:

是的,你可以在你的项目定义类中加入这样的东西:

val libraryJarPath = outputPath / "lib"

def collectJarsTask = {
  val jars = mainDependencies.libraries +++ mainDependencies.scalaJars
  FileUtilities.copyFlat(jars.get, libraryJarPath, log)
}

lazy val collectJars = task { collectJarsTask; None } dependsOn(compile)

并在您的 SBT 控制台中通过 collect-jars 运行任务。这会将 scala-library.jar 和用于编译的 jar 复制到一个名为 lib 的目录中,该目录与您的 classes 目录位于同一目录中。

【讨论】:

  • 感谢 Moritz 让我走上了正轨。不过,它并不包括我所有的 ivy 依赖项。
  • 对我有用的实际版本是: def collectJarsTask = { val jars = publicClasspath.get.filter(x=> !x.isDirectory) FileUtilities.copyFlat(jars, libraryJarPath, log) }
  • 我是新手使用 Build.scala。请提供有关放置上述代码的位置的更多细节。具体是在 BuildSettings 中还是在 Project 对象中(不知何故我不知道如何......)?
【解决方案2】:

老实说,不要为 sbt-assembly 烦恼。我是 scala 的新手,但我对技术很不了解,我处理了很多技术,而且 sbt-assembly 并不干净。只是一个意见。

我会推荐你​​ sbt-pack。很棒的作品。它还将为您提供可运行的脚本,适用于... WINDOWS 和 LINUX。

https://github.com/xerial/sbt-pack

【讨论】:

    【解决方案3】:

    您可以使用 sbt-assembly 制作一个包含所有依赖项的胖 jar:https://github.com/sbt/sbt-assembly

    【讨论】:

    • 我相信 sbt-assembly 非常适合创建 fat jar,但不能收集依赖项。 OP 要求提供一种工具来收集依赖项 jar。
    猜你喜欢
    • 2011-11-13
    • 2010-10-28
    • 2010-09-15
    • 1970-01-01
    • 1970-01-01
    • 2015-04-28
    • 2011-12-20
    • 2016-02-05
    • 1970-01-01
    相关资源
    最近更新 更多