我是sbt的新手。我希望它将所有依赖jar飞行以及我的jar文件放在一个地方。 SBT将运行该应用程序,但我已经散布了各种依赖项,并且.ivy文件夹中充满了我的jar文件间接依赖的东西。那么是否有一个简单的命令将它们全部复制到一个地方,以便我可以将它分发到另一台机器上?
答案 0 :(得分:19)
您可以使用许多插件:sbt-assembly,sbt-proguard,sbt-onejar,xitrum-package等。
答案 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":
- 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(使用One-JAR™打包您的项目):https://github.com/sbt/sbt-onejar
答案 6 :(得分:0)
你可以找一下这个sbt插件:https://github.com/anvie/sbt-onedir-plugin