Sbt native packager没有找到SystemdPlugin

时间:2016-07-18 12:43:14

标签: scala sbt sbt-native-packager

我试图获得一个使用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

2 个答案:

答案 0 :(得分:5)

本机打包程序站点(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 MyComp from "./file1";
// ... in my other component ...
// I am definitely using the component:
render() { return <MyComp foo="bar"/> }

我发现我的解决方案正在阅读有关此问题的评论。 https://github.com/sbt/sbt-native-packager/pull/785

答案 1 :(得分:4)

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)