У меня есть проект sbt с множеством подпроектов и зависимостей от внешних библиотек. build.sbt
звучит так:
val extlib1 = "xy.xxx" % "lib1" % "1.0+"
val extlib2 = "xy.yyy" % "lib2" % "1.0+"
val extlib3 = "xy.zzz" % "lib3" % "1.0+"
lazy val core=project settings (
name:="cor",
libraryDependencies++=Seq(extlib1)
)
lazy val servercore=project settings (
name:="srvcore",
libraryDependencies++=Seq(extlib1,extlib2)
) dependsOn(core)
lazy val masterserver=project settings (
name:="mastersrv",
mainClass:=Some("masterserver")
) dependsOn(servercore)
lazy val otherserver=project settings (
name:="othersrv",
libraryDependencies++=Seq(extlib3),
mainClass:=Some("otherserver")
) dependsOn(servercore)
// Only for aggregating the builds of the subprojects
lazy val root=project in file(".") settings(name:="proj") aggregate(
core,servercore,masterserver,otherserver
)
Так что на самом деле проект создает несколько программ ("masterserver", "otherserver"), которые зависят от внешних библиотек и подмножества подпроектов самого проекта.
Я хочу иметь полный набор JAR-файлов, необходимых для запуска главного сервера или другого сервера, отдельно для каждого. Итак, я хотел бы иметь, например. masterserver/target/<whatever>
содержащий
mastersrv.jar
srvcore.jar (needed by mastersrv.jar)
cor.jar (needed by srvcore.jar)
lib1.jar (needed by mastersrv and srvcore)
lib2.jar (needed by srvcore)
<whatever>.jar (further libs needed by lib1 or lib2)
и otherserver/target/<whatever>
с аналогичным содержанием (придется также добавить lib3.jar
, так как это необходимо для othersrv.jar
.
Как это сделать? Могу ли я выполнить это с помощью родного упаковщика? Выдача stage
в корневом проекте ничего не дает (потому что нет mailClass
?). Выдача masterserver/state
дает сообщение об ошибке
> masterserver/stage
[error] No such setting/task
[error] masterserver/stage
[error] ^
Должен признаться, что я не получил реальной подсказки из документации плагина родного упаковщика. Как я могу заархивировать то, что я хочу иметь?
Редактировать: Конечно, я не привязан к материалам каталога. Если я получу несколько ZIP-файлов в основном каталоге target
, это тоже нормально. Я хочу иметь все зависимости подпроекта только в одном месте.
Редактировать 2: Хорошо, я узнал, что Play! framework делает именно то, что я хочу. И для этого он использует родной упаковщик sbt. Как я могу архивировать рекурсивную универсальную упаковку подпроектов в проектах, не обрабатываемых Play sbt, которые используют Java в качестве языка программирования?