当sbt-assembly构建一个胖jar时,它会将所有依赖项放在主文件夹中。我需要构建一个看起来像这样的jar
- 域
- lib
是否可以使用sbt程序集或任何其他插件执行此操作?
答案 0 :(得分:1)
如果你想分离你的app jar文件和你的dependecy jar文件,这是我在sbt找到的最实用的方法;
创建 project / plugins.sbt 文件(如果不存在)并添加以下行:
addSbtPlugin("org.xerial.sbt" % "sbt-pack" % "0.8.0")
添加此行刷新项目后。 注意:插件版本可能会及时更改。
当sbt刷新完成更新你的build.sbt 文件时:
lazy val MyApp = project.in(file("."))
.settings(artifactName := {(
sv: ScalaVersion,
module: ModuleID,
artifact: Artifact) => "MyApp.jar"
})
.settings(packSettings)
然后运行:
sbt pack
或者,如果您正在为子项目执行此操作,请运行以下命令:
sbt "project childproject" clean pack
这将很好地分离你的主jar文件和你的依赖jar。
您的应用jar将位于目标scala文件夹中。
您的依赖项将位于target / pack / lib。
通过这种方式,您可以一次部署依赖项。
无论何时更改应用,您都可以部署应用jar文件。
因此,在每次更改中,您都不必部署超级jar文件。
同样在制作中,您可以运行您的应用:
java -cp "MyApp.jar:dependency_jars_folder/*" com.myapp.App