【发布时间】:2014-09-01 05:38:19
【问题描述】:
在构建 Web 应用程序时,SBT 能够将我所有的 jar 依赖项收集到 WAR 文件中。
这是否可以让 SBT 将我在非 Web 应用程序中依赖的所有 jar 放入一个目录中,以便在运行应用程序时轻松地将它们放到我的类路径中?
【问题讨论】:
-
我希望有一个命令可以创建 one 具有所有依赖项的 jar。
在构建 Web 应用程序时,SBT 能够将我所有的 jar 依赖项收集到 WAR 文件中。
这是否可以让 SBT 将我在非 Web 应用程序中依赖的所有 jar 放入一个目录中,以便在运行应用程序时轻松地将它们放到我的类路径中?
【问题讨论】:
是的,你可以在你的项目定义类中加入这样的东西:
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 目录位于同一目录中。
【讨论】:
老实说,不要为 sbt-assembly 烦恼。我是 scala 的新手,但我对技术很不了解,我处理了很多技术,而且 sbt-assembly 并不干净。只是一个意见。
我会推荐你 sbt-pack。很棒的作品。它还将为您提供可运行的脚本,适用于... WINDOWS 和 LINUX。
【讨论】:
您可以使用 sbt-assembly 制作一个包含所有依赖项的胖 jar:https://github.com/sbt/sbt-assembly
【讨论】: