Sbt 本机打包程序找不到 SystemdPlugin
Posted
技术标签:
【中文标题】Sbt 本机打包程序找不到 SystemdPlugin【英文标题】:Sbt native packager not finding SystemdPlugin 【发布时间】:2016-11-21 01:56:23 【问题描述】:我正在尝试构建一个使用 Systemd 原型的 rpm。但是,我在 build.sbt 中导入时遇到错误。我正在使用 sbt 版本 0.13.11 具体来说,我看到:
build.sbt:3: error: object systemloader is not a member of package com.typesafe.sbt.packager.archetypes
我正在尝试使用 sbt-native-packager 的 1.1.4 版。这是我的 plugins.sbt:
// The Typesafe repository
resolvers += "Typesafe repository" at "http://repo.typesafe.com/typesafe/releases/"
// The Sonatype snapshots repository
resolvers += "Sonatype snapshots" at "https://oss.sonatype.org/content/repositories/snapshots/"
addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.1.4")
我的 build.sbt:
import com.typesafe.sbt.packager.linux.LinuxSymlink
import com.typesafe.sbt.packager.rpm.RpmPlugin.autoImport._
import com.typesafe.sbt.packager.archetypes.systemloader._
scalaVersion := "2.11.7"
name := "systemdtest"
organization := "myTestOrg"
enablePlugins(JavaServerAppPackaging, RpmPlugin, SystemdPlugin)
version := "1.0"
// RPM SETTINGS
rpmVendor := "me"
packageSummary in Linux := "A summary"
packageDescription := "Do some stuff"
rpmRelease := "1"
rpmBrpJavaRepackJars := false
rpmLicense := Some("Copyright this project")
rpmGroup := Some("mygroup")
rpmPrefix := Some("/opt/mypath")
我在尝试运行时遇到错误
sbt stage
或
sbt rpm:packageBin
【问题讨论】:
【参考方案1】:本地打包网站 (http://www.scala-sbt.org/sbt-native-packager/archetypes/systemloaders.html) 上的 1.1 文档说要使用名为 SystemdPlugin 的自动插件。
但是,这在 1.1 分支中不存在,并且是在 1.2 分支中引入的(在本文发布时为 1.2.0M3),尚未 GA。
正确的约定是在你的 build.sbt 中添加一个名为“serverLoading”的赋值。
就我而言,要与 RPM 一起使用,我需要将 build.sbt 更改为以下内容:
import com.typesafe.sbt.packager.rpm.RpmPlugin.autoImport._
import com.typesafe.sbt.packager.archetypes.ServerLoader
scalaVersion := "2.11.7"
name := "systemdtest"
organization := "myTestOrg"
enablePlugins(JavaServerAppPackaging)
version := "1.0"
// RPM SETTINGS
rpmVendor := "me"
packageSummary in Linux := "A summary"
packageDescription := "Do some stuff"
rpmRelease := "1"
rpmBrpJavaRepackJars := false
rpmLicense := Some("Copyright this project")
rpmGroup := Some("mygroup")
rpmPrefix := Some("/opt/mypath")
//THIS IS THE KEY PIECE!!
serverLoading in Rpm := ServerLoader.Systemd
我在阅读有关此问题的 cmets 时找到了我的解决方案。 https://github.com/sbt/sbt-native-packager/pull/785
【讨论】:
这对我有用!也适用于 Debian,通过添加到 build.sbt: serverLoading in Debian := ServerLoader.Systemd 使用 sbt-native-packager 版本 1.2-M8(可能更早),您需要serverLoading in Rpm := Some(ServerLoader.Systemd)
【参考方案2】:
sbt native-packager 1.2.0 即将发布(2016 年 11 月),Muki Seiler 详细信息 this new feature 即将发布 PR 785:
Systemloaders
现在是AutoPlugins
之前,Java Server Application Archetype 提供了一个设置
serverLoading
,您可以在其中定义系统加载程序,如下所示:
import com.typesafe.sbt.packager.archetypes.ServerLoader
serverLoading in Rpm := ServerLoader.Upstart
轻松扩展单个系统加载器 有一个地方可以放置通用的这会添加必要的配置文件和维护脚本(
postinst
、postun
等),以便注册和启动您的应用程序。服务器原型和
systemloaders
之间的紧密耦合的最大问题是很难在不改变服务器原型的情况下添加systemloader
特定设置。 对代码和输出进行推理也困难得多。通过额外的系统加载器插件,我们打开了可能性
systemloader
功能(有一个SystemLoaderPlugin
负责通用设置)
单独测试系统加载器
更好的开发者体验
您可以通过启用具体的
systemloader
插件来启用systemloader
enablePlugins(SystemdPlugin)
【讨论】:
以上是关于Sbt 本机打包程序找不到 SystemdPlugin的主要内容,如果未能解决你的问题,请参考以下文章
如何将 PostgreSQL 卷附加到使用 SBT 本机打包程序生成的 Docker 映像?