SBT Native Packager SystemVLoader 不生成 SystemLoader 脚本

Posted

技术标签:

【中文标题】SBT Native Packager SystemVLoader 不生成 SystemLoader 脚本【英文标题】:SBT Native Packager SystemVLoader not generating SystemLoader scripts 【发布时间】:2016-12-27 12:47:07 【问题描述】:

我有一个 scala SBT 项目,我在其中使用本机打包程序插件。我捆绑为JavaServerAppPackaging 并希望生成脚本,以便使用rc.d 脚本(Amazon Linux)自动注册应用程序以进行启动和关闭。 在我的 plugins.sbt 中: addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.2.0-M5")

在 build.sbt lazy val server = DefProject("some/server", "server") .settings(serverModuleDeps) .settings(ServerSettings.allSettings: _*) .settings(CloudFormation.defaultSettings: _*) .settings(serverLoading in Universal := Option(ServerLoader.SystemV)) .settings(serviceAutostart:=true) .settings(startRunlevels:=Option("3")) .settings(stopRunlevels:=Option("3")) .settings(stackRegion := "US_WEST_2") .settings(codedeployAWSCredentialsProvider := Option(new ProfileCredentialsProvider("devcredentialsprovider"))) .dependsOn(sharedJvm) .dependsOn(langJVM) .enablePlugins(JavaServerAppPackaging, SystemVPlugin) .settings(daemonUser:="ec2-user") .configure(InBrowserTesting.jvm)

当我运行sbt stage 时,我可以看到一个universal 文件夹,其中包含一个bin 文件夹,其中包含一个用于启动应用程序的sh 和一个cmd 文件。但是,没有将应用程序注册/启动为系统服务的代码。是否需要任何其他配置才能让插件生成用于注册应用程序的脚本?我错过了什么?

我创建了一个基本项目来演示该问题:https://github.com/MojoJojo/sbt-native-packager-test

【问题讨论】:

如果你想创建一个 debian 包你应该运行debian:packageBin 命令。 【参考方案1】:

您的配置是正确的。你的 sbt 命令不是:)

使用 packageBin(IIRC 触发 universal:packageBin)仅生成一个通用 zip 文件。系统加载器是操作系统特定的部分。这就是它不包含在通用 zip 中的原因。

生成一个 debian 或 rpm 文件

debian:packageBin
rpm:packageBin

生成的 deb 或 rpm 包将包含 systemloader 文件,因为它们位于基于 rpm/debian 的系统所期望的位置。

相关问题:https://github.com/sbt/sbt-native-packager/issues/869

【讨论】:

以上是关于SBT Native Packager SystemVLoader 不生成 SystemLoader 脚本的主要内容,如果未能解决你的问题,请参考以下文章

sbt-native-packager,挂钩到 debian 包的生命周期

任何使用 sbt-native-packager 的好例子

使用 sbt-native-packager 时的模糊参考

Scala SBT - sbt-native-packager,如何指定自定义阶段目录

为啥 sbt-native-packager 不生成 bin 目录?

扩展 sbt-native-packager (Docker)