我有一个包含大量子项目和外部库依赖项的 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>
具有相似内容的 a(它还必须添加lib3.jar
,因为othersrv.jar
.
怎么做?我可以使用本机打包程序执行此操作吗?在根项目中发布stage
什么都不做(因为没有mailClass
?)。发出masterserver/state
错误消息
> masterserver/stage
[error] No such setting/task
[error] masterserver/stage
[error] ^
我必须承认,我没有从本机打包程序插件文档中得到真正的线索。我怎样才能归档我想要的东西?
编辑:当然,我不受目录的约束。如果我在主target
目录中有多个 ZIP 文件,也可以。我只想在一个位置拥有子项目的所有依赖项。
编辑 2:好的,我知道了 Play!框架正是我想要的。它使用 sbt 本机打包程序。如何在使用 Java 作为编程语言的非 Play sbt 处理的项目中归档子项目的递归通用打包?