如何使用sbt-assembly插件强制向fat jar添加提供的依赖项? [重复]

问题描述 投票:2回答:1

这个问题在这里已有答案:

我有一个Spark项目,我通常用sbt-assembly打包。所有火花依赖都标记为provided,不包括在我的胖罐中。我想要另一个命令来构建一个包含所有依赖项的真正胖的jar,包括spark。我正在尝试以下但没有运气:

lazy val standalone = project
.dependsOn(mainProj % "compile->compile;test->test;provided->compile")
.settings(
  logLevel in assembly := Level.Debug,
  assemblyOption in assembly := (assemblyOption in assembly).value.copy(includeScala = true, includeDependency = true)
)

请注意,How to add "provided" dependencies back to run/test tasks' classpath?的答案解释了如何将provided依赖项添加到运行时类路径中,但是我的问题是如何在执行sbt assembly后让它们最终出现在打包的工件中。

scala sbt sbt-assembly
1个回答
1
投票

要构建一个包含provided依赖项的所有包装的真正胖罐,我们可以像这样重新定义fullClasspath in assembly

assembly / fullClasspath := (Compile / fullClasspath).value

如果我们把它放在一个单独的命令中就像这样

commands += Command.command("assemblyTrulyFatJar") { state =>
  """set assembly / fullClasspath := (Compile / fullClasspath).value""" :: "assembly" :: state
}

然后执行sbt assemblyTrulyFatJar应该包装一切,而sbt assembly保持其默认行为。

© www.soinside.com 2019 - 2024. All rights reserved.