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