如何使用为每个子项目创建RPM的sbt native packager定义多项目构建

如何使用为每个子项目创建RPM的sbt native packager定义多项目构建,sbt,sbt-native-packager,Sbt,Sbt Native Packager,在我看到的所有关于多模块构建和sbt native packager的示例中,它们都将子项目聚合到一个包中。我有一些子项目,每个子项目都提供微型服务。我相信每一个项目都应该有自己的原生包,但我不知道如何做到这一点,并且为所有子项目提供一个单命令构建。这很简单。只需为要打包的每个子项目提供本机打包程序设置,而不在聚合项目上提供任何设置 我通过相应的修改进行了测试: 导入NativePackageKey_ 名称:=“mukis fullstack” //就像maven中的groupId一样使用 此构

在我看到的所有关于多模块构建和sbt native packager的示例中,它们都将子项目聚合到一个包中。我有一些子项目,每个子项目都提供微型服务。我相信每一个项目都应该有自己的原生包,但我不知道如何做到这一点,并且为所有子项目提供一个单命令构建。

这很简单。只需为要打包的每个子项目提供本机打包程序设置,而不在聚合项目上提供任何设置

我通过相应的修改进行了测试:

导入NativePackageKey_
名称:=“mukis fullstack”
//就像maven中的groupId一样使用
此构建中的组织:=“de.mukis”
//所有子项目都有相同的版本
此版本中的版本:=“1.0”
此构建中的ScalarAversion:=“2.11.2”
//公共依赖项
此构建中的库依赖项+++=Seq(
“com.typesafe”%”配置“%”1.2.0”
)
//这是根项目,聚合所有子项目
lazy val root=Project(
id=“root”,
base=文件(“.”),
//在此处配置本机打包设置
//settings=packageArchetype.java_server++Seq(
//维护者:=“约翰·史密斯”,
//packageDescription:=“Fullstack应用程序”,
//packageSummary:=“Fullstack应用程序”,
//入口点
//编译中的mainClass:=Some(“de.mukis.frontend.ProductionServer”)
//    ),
//始终在每个子项目上运行所有命令
聚合=顺序(前端、后端、api)
)dependsOn(前端、后端、api)//这将执行实际的聚合
//------项目前端------------------
惰性val前端=项目(
id=“前端”,
基本=文件(“前端”),
settings=packageArchetype.java_server++Seq(
维护者:=“约翰·史密斯”,
packageDescription:=“前端应用程序”,
编译中的mainClass:=Some(“de.mukis.frontend.ProductionServer”)
)
)dependsOn(api)
//------项目后端----------------
lazy val backend=Project(
id=“后端”,
base=文件(“后端”),
settings=packageArchetype.java_server++Seq(
维护者:=“约翰·史密斯”,
packageDescription:=“Fullstack应用程序”,
packageSummary:=“Fullstack应用程序”,
//入口点
编译中的mainClass:=Some(“de.mukis.frontend.ProductionServer”)
)
)dependsOn(api)
//------工程空气污染指数------------------
lazy val api=项目(
id=“api”,
base=文件(“api”)
结果:

debian:packageBin
...misc messages elided...
[info] dpkg-deb: building package `frontend' in `../frontend_1.0_all.deb'.
[info] dpkg-deb: building package `backend' in `../backend_1.0_all.deb'.

对于刚刚来到这里的人来说,一个更为最新的答案可能是:

lazy val root=(文件(“.”)中的项目)
.聚合(通用、前端、后端)
lazy val common=(文件中的项目(“common”))
lazy val frontend=(文件中的项目(“frontend”))
.enablePlugins(JavaServerAppPackaging)
lazy val backend=(文件中的项目(“后端”))
.dependsOn(普通)
.enablePlugins(JavaAppPackage)
.settings(JavaPackageSettings)
lazy val javaPackagingSettings=Seq(
//按照sbt native packager确定您需要的设置
)
说明

下面是支持上述配置的场景

  • Project
    root
    是父项目,我们不想打包它。它聚合了其他子项目
  • Project
    common
    是一种库,我们也不想打包它
  • 项目
    后端
    依赖于库的
    公共
  • Project
    frontend
    是一个独立的项目,打包为具有默认配置的Java服务器应用程序

看起来像是
packageArchetype.java_server
被弃用了,我认为最新的API应该是在我们想要单独打包的聚合模块上调用
.enablePlugins(JavaAppPackaging)
。它只起作用:)我很困惑,我发现这是在SO上,而不是在on上。