【问题标题】:Sbt native packager not finding SystemdPluginSbt 本机打包程序找不到 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

【问题讨论】:

    标签: scala sbt sbt-native-packager


    【解决方案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
    

    这会添加必要的配置文件和维护脚本(postinstpostun 等),以便注册和启动您的应用程序。

    服务器原型和systemloaders 之间的紧密耦合的最大问题是很难在不改变服务器原型的情况下添加systemloader 特定设置。
    对代码和输出进行推理也困难得多。

    通过额外的系统加载器插件,我们打开了可能性

    • 轻松扩展单个系统加载器
    • 有一个地方可以放置通用的systemloader 功能(有一个SystemLoaderPlugin 负责通用设置)
    • 单独测试系统加载器
    • 更好的开发者体验

    您可以通过启用具体的systemloader 插件来启用systemloader

    enablePlugins(SystemdPlugin)
    

    【讨论】:

      猜你喜欢
      • 2017-11-15
      • 2018-11-05
      • 2018-12-24
      • 2015-04-13
      • 1970-01-01
      • 2016-12-01
      • 2019-11-12
      • 2016-11-05
      • 2019-03-28
      相关资源
      最近更新 更多