我有一个Spark项目,通常将其与sbt-assembly打包在一起。所有spark依赖项都标记为provided
,并且不包含在我的胖子中。
我想要另一个命令来构建一个包含所有依赖关系的胖子罐,包括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
之后使它们最终出现在打包的工件中
答案 0 :(得分: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
保留其默认行为。