Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 如何将sbt本机打包程序用于多个项目_Scala_Sbt_Sbt Assembly_Sbt Native Packager - Fatal编程技术网

Scala 如何将sbt本机打包程序用于多个项目

Scala 如何将sbt本机打包程序用于多个项目,scala,sbt,sbt-assembly,sbt-native-packager,Scala,Sbt,Sbt Assembly,Sbt Native Packager,我正在将几个大型scala项目合并为一个项目。目前,他们使用剪切粘贴(不是很多代码)共享代码,我正在制作,这样就有了一个通用的实用程序jar。这些项目中的大多数都部署在amazon云上,并使用sbt原生打包机进行打包 我的问题是,我不知道如何为sbt本机管理器配置多个项目。我对它也不是很熟悉,因为我是在完成了所有的初始工作之后才进入这个项目的 我已把问题缩小到我能解决的最小程度。有一个git回购协议证明了这个问题 在project/plugins.sbt中,重要的行是 addSbtPlugin(

我正在将几个大型scala项目合并为一个项目。目前,他们使用剪切粘贴(不是很多代码)共享代码,我正在制作,这样就有了一个通用的实用程序jar。这些项目中的大多数都部署在amazon云上,并使用sbt原生打包机进行打包

我的问题是,我不知道如何为sbt本机管理器配置多个项目。我对它也不是很熟悉,因为我是在完成了所有的初始工作之后才进入这个项目的

我已把问题缩小到我能解决的最小程度。有一个git回购协议证明了这个问题

在project/plugins.sbt中,重要的行是

addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.0.6")
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.0")
build.sbt太长,无法放在这里,但它的大致形状是

import com.typesafe.sbt.SbtNativePackager
import com.typesafe.sbt.packager.archetypes.JavaServerAppPackaging

enablePlugins(SbtNativePackager)

enablePlugins(JavaServerAppPackaging)

lazy val commonSettings = Seq(
  ...
  scalaVersion := "2.11.8",
  assemblyJarName in assembly := s"${name.value}.jar",
  assemblyMergeStrategy in assembly := {
    case "BUILD" => MergeStrategy.discard
    case other => MergeStrategy.defaultMergeStrategy(other)
  }
)

lazy val project1Settings = commonSettings ++ Seq(
  rpmVendor := "someOrganisation",
  packageDescription in Rpm := "Some description1",
  rpmLicense := Some("Copyright 2016 someOrganisation. All rights reserved."),
  rpmRequirements := Seq(
    "java-1.8.0-openjdk"
  ),
  version in Rpm := "1",
  rpmRelease := version.value,
  rpmDaemonLogFile := s"${name.value}.log",
  daemonUser in Linux := "someUserName",
  daemonGroup in Linux := (daemonUser in Linux).value,
  rpmPost := Some(
    """|chkconfig --add someService1
      |chkconfig someService1 on
    """.stripMargin),
  linuxPackageMappings ++= Seq()    // <--- line 53
)


lazy val project2Settings = commonSettings ++ Seq(
  identical to project 1 settings except
  packageDescription in Rpm := "Some description2",
  rpmPost := Some(
    """|chkconfig --add someService2
      |chkconfig someService2 on
    """.stripMargin),
  linuxPackageMappings ++= Seq()   // <--- line 72
)

lazy val project1 = (project in file("components/service1")).settings(project1Settings: _*)

lazy val project2 = (project in file("components/service2")).settings(project2Settings: _*)
第53行和第72行标记在上面包含的build.sbt代码段中

我不知道的事情 我在这方面还不够熟练,不知道为什么这个项目有sbt组装和sbt包管理器。我已经在plugins.sbt中对sbt程序集进行了注释,但仍然得到了这个问题,所以我现在不认为这是造成这个问题的原因

我尝试过的事情 我已尝试将子项目设置放入与实际组件关联的build.sbt文件中。我也有同样的问题。 我还很好地了解了示例项目,例如,并且非常仔细地阅读了文档,尽管我对它没有“经验”:只是在“阅读文档”级别。我还研究了诸如和之类的问题

有效的东西 将packageMappings保留在build.sbt的“主体”中不会导致“sbt加载问题”,但我还不知道它是否会实际生成包

软件堆栈

  • 操作系统:MacOs
  • Java:1.8.0_74-b02
  • 斯卡拉:2.11.8
  • sbt:0.13.8
  • sbt本机打包机1.0.6

看起来需要在设置中为
project1
project2
启用
SbtNativePackager

尝试通过添加
启用插件(SbtNativePackager)
来修改设置:

lazy val project1Settings = commonSettings ++ Seq(
    rpmVendor := "someOrganisation",
    packageDescription in Rpm := "Some description1",
    rpmLicense := Some("Copyright 2016 someOrganisation. All rights reserved."),
    rpmRequirements := Seq(
        "java-1.8.0-openjdk"
    ),
    version in Rpm := "1",
    rpmRelease := version.value,
    rpmDaemonLogFile := s"${name.value}.log",
    daemonUser in Linux := "someUserName",
    daemonGroup in Linux := (daemonUser in Linux).value,
    rpmPost := Some(
        """|chkconfig --add someService1
           |chkconfig someService1 on
        """.stripMargin),
    enablePlugins(SbtNativePackager),
    linuxPackageMappings ++= Seq()    // <--- line 53
)
lazy val project1Settings=commonSettings++Seq(
rpmVendor:=“某个组织”,
Rpm中的packageDescription:=“一些描述1”,
rpmLicense:=Some(“版权所有2016 SomeOrganization.保留所有权利”),
RPM要求:=序号(
“java-1.8.0-openjdk”
),
Rpm中的版本:=“1”,
rpmRelease:=version.value,
rpmDaemonLogFile:=s“${name.value}.log”,
Linux中的daemonUser:=“someUserName”,
Linux中的daemonGroup:=(Linux中的daemonUser).value,
rpmPost:=Some(
“”“| chkconfig--添加一些服务1
|chkconfig someService1打开
“.stripMargin”),
启用插件(SbtNativePackager),
linuxPackageMappings++=Seq()//启用插件(SbtNativePackager)
看起来很有趣。你还记得你是否编译过上面的内容吗?它是作为类型的
DslEntry
,而不是定义的
SettingsDefinition
。sbt 0.13.15,sbt native packager 1.2.0Call
enablePlugins(…)
在一个
项目上
实例上,看在上帝的份上!就像
val foo=(文件中的项目(…)。设置(…)。启用插件(…)
。这会起作用。
lazy val project1Settings = commonSettings ++ Seq(
    rpmVendor := "someOrganisation",
    packageDescription in Rpm := "Some description1",
    rpmLicense := Some("Copyright 2016 someOrganisation. All rights reserved."),
    rpmRequirements := Seq(
        "java-1.8.0-openjdk"
    ),
    version in Rpm := "1",
    rpmRelease := version.value,
    rpmDaemonLogFile := s"${name.value}.log",
    daemonUser in Linux := "someUserName",
    daemonGroup in Linux := (daemonUser in Linux).value,
    rpmPost := Some(
        """|chkconfig --add someService1
           |chkconfig someService1 on
        """.stripMargin),
    enablePlugins(SbtNativePackager),
    linuxPackageMappings ++= Seq()    // <--- line 53
)