Dir*_*cht 6 sbt sbt-native-packager
我有一个包含大量子项目和外部库依赖项的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
)
Run Code Online (Sandbox Code Playgroud)
实际上,该项目创建了几个程序("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)
Run Code Online (Sandbox Code Playgroud)
并且otherserver/target/<whatever>具有相似的内容(它也必须添加lib3.jar,因为它需要othersrv.jar.
怎么做?我可以使用本机打包程序执行此操作吗?发行stage根项目不执行任何操作(因为没有mailClass?).发出masterserver/state会给出错误消息
> masterserver/stage
[error] No such setting/task
[error] masterserver/stage
[error] ^
Run Code Online (Sandbox Code Playgroud)
我必须承认,我没有从本机打包程序插件文档中获得真正的线索.我如何存档我想要的内容?
编辑:当然,我没有绑定目录的东西.如果我在主target目录中获得多个ZIP文件,也可以.我只想在一个位置拥有子项目的所有依赖项.
编辑2:好的,我学会了Play!框架完全符合我的要求.它使用sbt native packager.如何在使用Java作为编程语言的非Play sbt处理的项目中实现子项目的递归通用打包?
好吧,一旦我测试了一下,答案就非常简单了.首先,将本机打包器放在项目全局中project/plugins.sbt
addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "0.6.4")
Run Code Online (Sandbox Code Playgroud)
然后,把配置在本地打包build.sbt的子项目.在上面的示例中,将以下内容放入masterserver/build.sbt:
// Setup the packager
packageArchetype.java_application
// Enable JAR export for staging
exportJars := true
Run Code Online (Sandbox Code Playgroud)
所需的JAR文件集将放入子项目的target目录中,在此示例中为masterserver/target/universal/stage/lib
子项目的其余部分配置可以保留在全局中build.sbt,但我发现无法以这种方式配置本机打包程序.
| 归档时间: |
|
| 查看次数: |
2047 次 |
| 最近记录: |