Включение файла JAR пакета Spark в толстый JAR, сгенерированный SBT

Проект spark-daria загружен в пакеты Spark, и я получаю доступ к коду spark-daria в другом проекте SBT с помощью плагина sbt-spark-package.

Я могу включить spark-daria в толстый файл JAR, сгенерированный sbt assembly с помощью следующего кода в build.sbt файл.

spDependencies += "mrpowers/spark-daria:0.3.0"

val requiredJars = List("spark-daria-0.3.0.jar")
assemblyExcludedJars in assembly := {
  val cp = (fullClasspath in assembly).value
  cp filter { f =>
    !requiredJars.contains(f.data.getName)
  }
}

Этот код выглядит как взломать. Есть ли лучший способ включить spark-daria в толстый файл JAR?

NB Я хочу создать полусодержащий файл JAR здесь. Я хочу, чтобы spark-daria был включен в файл JAR, но я не хочу, чтобы все Spark в файле JAR!

1 ответ

README для версии 0.2.6 гласит следующее:

В любом случае, когда вы действительно не можете указать зависимости Spark, используя sparkComponents (например, у вас есть правила исключения) и настройте их как provided (например, автономная банка для демонстрации), вы можете использовать spIgnoreProvided := true правильно использовать assembly плагин.

Затем вы должны использовать этот флаг в своем определении сборки и установить зависимости Spark как provided как я делаю с spark-sql:2.2.0 в следующем примере:

libraryDependencies += "org.apache.spark" %% "spark-sql" % "2.2.0" % "provided"

Обратите внимание, что при установке этого параметра в вашей IDE может больше не быть необходимых ссылок на зависимости для компиляции и запуска вашего кода локально, что означает, что вам придется вручную добавлять необходимые JAR-файлы в classpath. Я делаю это часто на IntelliJ, я делаю дистрибутив Spark на моей машине и добавляю его jars каталог с описанием проекта IntelliJ ( этот вопрос может вам в этом помочь, если он вам понадобится).

Другие вопросы по тегам