У меня есть проект sbt с множеством подпроектов и внешних зависимостей библиотеки. build.sbt
выглядит следующим образом:Как использовать sbt native packager с подпроектами (sbt 0.13)
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] ^
I му признаю, что я не понимаю реальную информацию из документации плагина native packager. Как я могу архивировать то, что хочу?
Редактировать: Конечно, я не привязан к файлу каталога. Если я получаю несколько ZIP-файлов в основном каталоге target
, это тоже o.k. Я хочу только иметь все зависимости подпроекта в одном месте.
Редактировать 2: Хорошо, я узнал, что Игра! framework делает именно то, что я хочу. И для этого он использует собственный пакет sbt. Как я могу архивировать рекурсивную универсальную упаковку подпроектов в проектах, не связанных с игрой sbt, которые используют Java в качестве языка программирования?
Спасибо за самоответ. Я нашел это весьма полезным :) – opyate
Этот ответ, вероятно, должен быть обновлен, чтобы отразить использование средства sbt 'AutoPlugin', используемого в строке 1.x' sbt-native-packager'. – metasim
Ну, действительно, ответ теперь более двух лет. К сожалению, с тех пор мы не изменили или не обновили наши инструментальные цепочки, поэтому я должен признать, что у меня нет опыта работы с AutoPlugin. :-( –