在 sbt 程序集中指定 jar 结构

Specify jar structure in sbt assembly

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

--域名

-- 库

是否可以使用 sbt assembly 或任何其他插件来做到这一点?

如果你想分离你的应用jar文件你的依赖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 文件。

因此,在每次更改时,您都不必部署 uber jar 文件。

同样在生产中,您可以 运行 您的应用程序:

java -cp "MyApp.jar:dependency_jars_folder/*" com.myapp.App