Ответ 1
Используйте плагин sbt-pack https://github.com/xerial/sbt-pack. До сих пор я нашел его самым чистым способом упаковки проекта и зависимостей.
Я пишу в Scala и использую SBT с плагином sbt-assembly. В моем проекте много внешних библиотек, поэтому для упаковки файла JAR sbt-сборка занимает много времени. Я хотел бы иметь отдельные файлы JAR для моего кода и для зависимостей. Поэтому я мог просто перекомпилировать и перепаковать только мой код. Как это сделать?
Прогресс на данный момент:
Следующие команды в build.sbt
позволяют sbt-сборке упаковывать библиотеки:
assembleArtifact in packageScala := false
assembleArtifact in packageDependency := false
Затем можно создать отдельные jar файлы, передав следующие команды: assembly
, assembly-package-scala
и assembly-package-dependency
. Они делают три jar файла: один, содержащий мою программу, один с библиотеками scala и один со всеми зависимостями.
Однако файл jar больше не является исполняемым, потому что он не видит зависимости в отдельном файле jar. Я думаю, что мне нужно добавить classpath к Assembly-SBT, но я не уверен, как это сделать.
Используйте плагин sbt-pack https://github.com/xerial/sbt-pack. До сих пор я нашел его самым чистым способом упаковки проекта и зависимостей.
См. Настройка Classpath Still Can Can Find External Jar. Oracle говорит:
Когда вы используете этот параметр, JAR файл является источником всех пользовательских классов, а другие параметры пути к пользовательскому классу игнорируются.
Итак, вы должны сказать:
java -cp "foo-assembly-0.1-deps.jar:foo-assembly-0.1.jar" Main
где Main
- это имя основного класса, а :
- разделитель файлов на вашей ОС (;
в Windows).
В настоящее время существует ошибка в assembly-package-scala
, и она выводится пустым, но это не имеет значения, потому что assembly-package-dependency
также содержит библиотеку Scala.