Как настроить SBT для создания отдельных jar-файлов для зависимостей и кода приложения?

#scala #sbt #sbt-assembly

#scala #sbt #sbt-сборка

Вопрос:

Я использую SBT как инструмент сборки для проектов spark. Я могу создать полный jar-файл своих зависимостей с помощью sbt-assembly плагина.

Однако в результате получается ~ 120-миллиметровый jar-файл, в основном состоящий из зависимостей, которые мне нужно постоянно загружать в S3 для запуска моего кода — на это уходит 3-5 минут. Не так много времени, но довольно раздражает.

Что значительно улучшило бы ситуацию, так это то, что SBT создал бы jar-файл зависимостей (который редко меняется) и небольшой jar-файл моего кода приложения, который я смогу загрузить через несколько секунд.

Возможно ли это? Я довольно новичок в SBT.

Ответ №1:

sbt-assembly поддерживает готовое разделение jar-файла проектного приложения изjar-файла зависимостей. Для создания только jar зависимостей выполните

 sbt assemblyPackageDependency
  

Чтобы создать jar только с кодом вашего проектного приложения, определите assemblyOption следующим образом

 assemblyOption in assembly := (assemblyOption in assembly).value.copy(includeScala = false, includeDependency = false)
  

и выполнить sbt assembly как обычно.

Комментарии:

1. Спасибо, я смог создать оба jar, загрузить в S3 и запустить с помощью spark-submit --jars s3://<bucket path>/<project>-deps.jar s3://<bucket path>/<project>.jar