Как сделать мультипроектную толстую банку с помощью sbt-assembly

У меня есть мультипроект scala, использующий spark, и я пытаюсь использовать плагин sbt sbt-assembly 0.14.3, чтобы сделать толстую банку. Мой 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, чтобы эта толстая банка содержала всю библиотеку и код из ядра проекта. Я пробовал следующее:

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

Однако, когда я использую «сборку» в основном проекте, я могу получить свою толстую банку.


person Jitsumi    schedule 02.06.2016    source источник
comment
Соответствует ли указанная вами версия Scala той, для которой был скомпилирован Spark?   -  person nattyddubbs    schedule 02.06.2016
comment
Да, но это просто упаковка, я пока не пытаюсь ее выполнить, так что даже если версия отличается, это не должно быть проблемой для упаковки.   -  person Jitsumi    schedule 02.06.2016


Ответы (1)


Ваша сборка показывает, что зависимость библиотеки от Spark (независимо от оператора provided) отсутствует в пути к классам sub_project, и сообщение об ошибке, которое вы получаете, соответствует этому. Возможно, вы захотите добавить эту зависимость в общие настройки.

person Francois G    schedule 02.06.2016