Включение файла 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 ( этот вопрос может вам в этом помочь, если он вам понадобится).