这个问题在这里已有答案:
我有一个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
后让它们最终出现在打包的工件中。
要构建一个包含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
保持其默认行为。