【问题标题】:How to make multi-project fat jar with sbt-assembly如何使用 sbt-assembly 制作多项目 fat jar
【发布时间】:2016-10-01 23:41:24
【问题描述】:

我有一个使用 spark 的 scala 多项目,并尝试使用 sbt 插件 sbt-assembly 0.14.3 来制作一个胖 jar。我的 buils.sbt 看起来像这样:

lazy val commonSettings = Seq(
  organization := "blabla",
  version := "0.1.0",
  scalaVersion := "2.11.8"
)


lazy val core = (project in file("."))
  .settings(commonSettings: _*)
  .settings(libraryDependencies ++= Seq(
"org.apache.spark" %% "spark-core" % "1.6.1" % "provided",
"org.apache.spark" %% "spark-sql" % "1.6.1" % "provided",
"org.apache.spark" %% "spark-mllib" % "1.6.1" % "provided",...)


lazy val sub_project = project
  .settings(commonSettings: _*)
  .aggregate(core)
  .dependsOn(core)

我想创建一个 sub_project 的胖 jar,以便这个胖 jar 包含项目核心中的所有库和代码。 我尝试了以下方法:

sbt
project sub_project
assembly

我收到以下错误:

[error] missing or invalid dependency detected while loading class file 'blabla.class'.
[error] Could not access term spark in package org.apache,
[error] because it (or its dependencies) are missing. Check your build definition for
[error] missing or conflicting dependencies. (Re-run with `-Ylog-classpath` to see the problematic classpath.)
[error] A full rebuild may help if 'blabla.class' was compiled against an incompatible version of org.apache.
[error] one error found

但是,当我在核心项目上使用“程序集”时,我可以得到我的胖 jar。

【问题讨论】:

  • 您指定的 Scala 版本是否与编译 Spark 的版本相匹配?
  • 是的,只是打包,我还没有尝试执行,所以即使版本不同,打包应该没有问题

标签: scala apache-spark jar sbt sbt-assembly


【解决方案1】:

您的构建显示在 sub_project 的类路径中不存在对 Spark 的库依赖项(与 provided 语句无关),并且您收到的错误消息与此匹配。您可能希望将此依赖项添加到常用设置中。

【讨论】:

    猜你喜欢
    • 2018-11-18
    • 2014-09-19
    • 2019-08-08
    • 1970-01-01
    • 2016-04-13
    • 2018-04-26
    • 2015-08-05
    • 2016-09-07
    • 2013-07-25
    相关资源
    最近更新 更多