如何使用 sbt-assembly 插件强制将提供的依赖项添加到 fat jar?

How to force adding provided dependency to fat jar using sbt-assembly plugin?

我有一个 Spark 项目,通常用 sbt-assembly 打包。所有 spark 依赖项都标记为 provided 并且不包含在我的 fat jar 中。 我想要另一个命令来构建一个包含所有依赖项的非常胖的 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 依赖项添加到运行时类路径,但我的问题是如何在执行 [=13] 后将它们添加到打包的工件中=].

要构建一个真正的 fat jar 来打包所有内容,包括 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 保持其默认行为。