how do I get sbt to gather all the jar files my code depends on into one place?
我是 sbt 的新手。我希望它把所有的依赖
那么有没有一个简单的命令可以将它们全部复制到一个地方,以便我可以将其分发到另一台机器上?
您可以使用许多插件:sbt-assembly、sbt-proguard、sbt-onejar、xitrum-package 等。
查看 SBT 插件列表。
将以下行添加到您的
1 | retrieveManaged := true |
这将在本地收集依赖项
在您的构建文件中创建一个任务,如下所示:
1 2 3 4 5 6 7 8 9 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) } } |
像这样将任务添加到项目中:
1 2 3 4 5 6 7 8 | lazy val HubSensors = Project("HubSensors", file("HubSensors"), settings = shared ++ Seq( copyDepTask, resolvers ++= Seq(novusRels), libraryDependencies ++= Seq( jodatime ) )) dependsOn(HubCameraVision, JamServiceProxy, HubDAL) |
在 SBT 控制台中输入:
1 2 | project [Project Name] pack |
试试 sbt-pack 插件 https://github.com/xerial/sbt-pack,它会收集 target/pack 文件夹中所有依赖的 jars 并生成启动脚本。
你也可以试试 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 等。
SBT 文档有一个"One Jar Plugins"列表:
- sbt-assembly: https://github.com/sbt/sbt-assembly
- xsbt-proguard-plugin: https://github.com/adamw/xsbt-proguard-plugin
- sbt-deploy: https://github.com/reaktor/sbt-deploy
- sbt-appbundle (os x standalone): https://github.com/sbt/sbt-appbundle
- sbt-onejar (Packages your project using One-JAR?): https://github.com/sbt/sbt-onejar
愿你寻找这个 sbt 插件:https://github.com/anvie/sbt-onedir-plugin