如何使用 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
保持其默认行为。
我有一个 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
保持其默认行为。