在sbt程序集中指定jar结构

时间:2016-11-16 23:17:00

标签: sbt sbt-assembly

当sbt-assembly构建一个胖jar时,它会将所有依赖项放在主文件夹中。我需要构建一个看起来像这样的jar

- 域

  • 域类

- lib

  • 依赖类

是否可以使用sbt程序集或任何其他插件执行此操作?

1 个答案:

答案 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