如何让sbt将我的代码所依赖的所有jar文件收集到一个地方?
我是新来的。我希望它将所有依赖项如何让sbt将我的代码所依赖的所有jar文件收集到一个地方?,sbt,scala,jar,Sbt,Scala,Jar,我是新来的。我希望它将所有依赖项jar文件以及我的jar文件放在一个地方。SBT将运行这个应用程序,但我有各种各样的依赖项,还有一个.ivy文件夹,里面装满了我的jar文件间接依赖的东西 有没有一个简单的命令可以将它们复制到一个地方,这样我就可以将它们分发到另一台机器上?有很多插件可以使用:,,等等 请参阅。在生成文件中创建任务,如下所示: lazy val copyDependencies = TaskKey[Unit]("pack") def copyDepTask = copyDepen
jar
文件以及我的jar文件放在一个地方。SBT将运行这个应用程序,但我有各种各样的依赖项,还有一个.ivy
文件夹,里面装满了我的jar文件间接依赖的东西
有没有一个简单的命令可以将它们复制到一个地方,这样我就可以将它们分发到另一台机器上?有很多插件可以使用:,,等等
请参阅。在生成文件中创建任务,如下所示:
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)
project [Project Name]
pack
在SBT控制台类型中:
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)
project [Project Name]
pack
SBT文件具有以下功能:
- sbt组件:
- xsbt proguard插件:
- sbt部署:
- sbt appbundle(os x单机版):
- SBTONEJAR(使用一个JAR打包您的项目™): 李>
尝试sbt pack plugin,它收集目标/pack文件夹中的所有相关JAR,并生成启动脚本。您也可以尝试sbt Native Packager:(sbt 0.7+) 这仍然是一个WIP,但将在未来几周的Play Framework 2.2中使用。
有了它,您可以创建独立的ZIP文件、Debian软件包(DEB)、Windows安装软件包(MSI)、DMG、RPM等等。您可以寻找这个sbt插件:在
build.sbt
文件中添加以下行
retrieveManaged := true
这将在本地收集依赖项是的,这真的很痛苦。也许我错过了一些东西,但我真的不明白为什么这不是简单构建的一部分Tool@AlexPovar:我想有很多方法可以做到这一点,因此选择一种方法并将其标准化可能是有害的(但我同意这一点).我刚刚从sbt onejar迁移到sbt pack,我不得不说它非常好:快速、易于使用且可靠。我发现这种方法有两个困难,尤其是在大型项目中:1.在多个相互依赖的项目上运行更新,最终会多次复制相同的.jar;2.您可能具有相同的依赖关系,但具有不同的v正在复制版本。这通常发生在流行的库中,如log4j和apache commons,因为同一工件被多个依赖项传递引用。有关详细信息,请参阅任务
executed
。您可以执行(伪代码)“allFiles-executed”之类的操作,但这绝非小事。您必须深入研究SBT API。但是,对于小型项目,您的方法将非常好。为了进一步提供帮助,在安装了SBT native packager之后,您可以使用SBT stage
在target/universal/stage
中获取文件,感谢您的提示。您是如何知道这一点的指向sbt 0.13.13文档的链接(我没有找到)它工作-sbt compile
在lib_unmanaged/
下收集依赖项。非常感谢中提到,我喜欢这种方法,不想为差异插件配置。但是,看起来retrieveManaged不会获得maven管理的依赖于java库,如果有解决方案的话?对sbt 1.30降级不起作用如果您真的想使用此功能,您的sbt有什么区别?