如何让sbt将我的代码所依赖的所有jar文件收集到一个地方?

时间:2011-11-02 11:08:31

标签: scala jar distribution sbt

我是sbt的新手。我希望它将所有依赖jar飞行以及我的jar文件放在一个地方。 SBT将运行该应用程序,但我已经散布了各种依赖项,并且.ivy文件夹中充满了我的jar文件间接依赖的东西。那么是否有一个简单的命令将它们全部复制到一个地方,以便我可以将它分发到另一台机器上?

7 个答案:

答案 0 :(得分:19)

您可以使用许多插件:sbt-assemblysbt-proguardsbt-onejarxitrum-package等。

请参阅list of SBT plugins

答案 1 :(得分:13)

将以下行添加到build.sbt文件中。

retrieveManaged := true

这将在本地收集依赖项

答案 2 :(得分:10)

在您的构建文件中创建一个如下任务:

lazy val copyDependencies = TaskKey[Unit]("pack")

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 HubSensors =
  Project("HubSensors", file("HubSensors"), settings = shared ++ Seq(
    copyDepTask,
    resolvers ++= Seq(novusRels),
    libraryDependencies ++= Seq(
      jodatime
    )
  )) dependsOn(HubCameraVision, JamServiceProxy, HubDAL)

在SBT控制台中输入:

project [Project Name]
pack

答案 3 :(得分:8)

尝试sbt-pack插件https://github.com/xerial/sbt-pack,它会收集target / pack文件夹中的所有相关jar并生成启动脚本。

答案 4 :(得分:4)

您也可以尝试使用SBT Native Packager:https://github.com/sbt/sbt-native-packager(sbt 0.7 +)

这仍然是一个WIP,但将在未来几周内在Play Framework 2.2中使用。 有了这个,您可以创建独立的ZIP文件,Debian软件包(DEB),Windows安装包(MSI),DMG,RPM等。

答案 5 :(得分:2)

SBT文档有list of "One Jar Plugins"

  

答案 6 :(得分:0)

你可以找一下这个sbt插件:https://github.com/anvie/sbt-onedir-plugin