Каковы основные различия между sbt-pack и sbt-assembly?

Я только что наткнулся на плагин sbt-pack. Поток разработки кажется устойчивым. Это удивительно для меня, поскольку я считал, что единственный плагин для (цитирования заголовка sbt-pack) "создания дистрибутивных пакетов Scala". sbt-assembly (среди других функций).

Каковы основные различия между плагинами? Когда я должен использовать один над другим?

Ответ 1

(Отказ от ответственности: я поддерживаю sbt-сборку)

SBT-сборки

sbt-assembly создает толстый JAR - один JAR файл, содержащий все файлы классов из вашего кода и библиотек. По эволюции он также содержит способы разрешения конфликтов, когда несколько JAR предоставляют один и тот же путь к файлу (например, файл config или README). Это включает в себя распаковку всех библиотечных JAR, поэтому она немного медленная, но они сильно кэшированы.

SBT-пакет

sbt-pack сохраняет все библиотеки JAR неповрежденными, перемещает их в каталог target/pack (в отличие от кэша плюща, где они обычно живут ) и создает оболочку script для запуска.

SBT-нативной упаковщик

sbt-native-packager похож на sbt-pack, но он был запущен коммиттером sbt Josh Suereth, и теперь поддерживается высокопроизводительным Nepomuk Seiler (также известный как muuki88). Плагин поддерживает ряд форматов, таких как файл MSI Windows и файл debbian deb. Недавнее дополнение - это поддержка Docker images.

Все являются жизнеспособными средствами создания изображений развертывания. В некоторых случаях, таких как развертывание вашего приложения в веб-среде и т.д., Это может облегчить работу, если вы имеете дело с одним файлом, а не с дюжиной.

Почетное упоминание: sbt-progard и sbt-onejar.