Скажите SBT, чтобы собрать все мои зависимости вместе

При создании веб-приложения SBT может собрать все мои зависимости jar в WAR-файл.

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

3 ответа

Решение

Да, вы можете поместить что-то вроде этого в ваш класс определения проекта:

val libraryJarPath = outputPath / "lib"

def collectJarsTask = {
  val jars = mainDependencies.libraries +++ mainDependencies.scalaJars
  FileUtilities.copyFlat(jars.get, libraryJarPath, log)
}

lazy val collectJars = task { collectJarsTask; None } dependsOn(compile)

и запустите задачу через collect-jars в вашей консоли SBT. Это скопирует scala-library.jar и jar-файлы, используемые для компиляции, в каталог с именем lib в том же каталоге, что и ваш classes каталог.

По моему честному мнению, не беспокойтесь о sbt-сборке. Я новичок в scala, но я довольно технологичен, я использую множество технологий и sbt-сборка, это не чисто. Просто мнение.

Я бы порекомендовал вам sbt-pack. Потрясающая работа. Он также даст вам исполняемые скрипты, как для Windows, так и для Linux.

https://github.com/xerial/sbt-pack

Вы можете использовать sbt-assembly, чтобы сделать толстый флягу со всеми зависимостями: https://github.com/sbt/sbt-assembly

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