2016-06-20 38 views
2

我正在将几个大型scala项目合并为一个。目前他们使用剪切和粘贴(不是非常多的代码)来共享代码,而我正在使它有一个通用的实用程序jar。这些项目中的大多数都部署在亚马逊云上,并使用sbt-native-packager对其进行打包如何在多个项目中使用sbt-native-packager

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

我已经将问题减少到了我能得到的最小问题。有一个在https://github.com/stave-escura/multiprojectissue.git一个git回购这表明了问题

在项目/ 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: _*) 

在真正的项目中linuxPackageMappings相当复杂,是我的问题。他们在项目之间有所不同。当我build.sbt加载到SBT我得到错误

References to undefined settings: 

    project2/*:linuxPackageMappings from project2/*:linuxPackageMappings (~/git/multiprojectissue/build.sbt:72) 

    project1/*:linuxPackageMappings from project1/*:linuxPackageMappings (~/git/multiprojectissue/build.sbt:53) 

    at sbt.Init$class.Uninitialized(Settings.scala:265) 
    ... 
    at xsbt.boot.Boot.main(Boot.scala) 
[error] References to undefined settings: 
[error] 
[error] project2/*:linuxPackageMappings from project2/*:linuxPackageMappings (/Users/ricep02/git/multiprojectissue/build.sbt:72) 
[error] 
[error] project1/*:linuxPackageMappings from project1/*:linuxPackageMappings (/Users/ricep02/git/multiprojectissue/build.sbt:53) 

线53和72被标记在build.sbt代码段I中包括在内。

事情我不知道 我没有足够的技术在这个知道为什么该项目已SBT组装和SBT-包管理器。我的评论SBT组装出plugins.sbt的,仍然可以得到这个问题,所以我在此刻不认为这是促成

事情我已经试过 我试图把分项目设置到与实际组件相关的build.sbt文件中。我遇到同样的问题。 我也很好地看了一个例子项目,比如https://github.com/muuki88/sbt-native-packager-examples/tree/master/multi-module-build,并且仔细阅读了http://www.scala-sbt.org/sbt-native-packager/的文档,虽然我对它没有'经验':只是在'阅读文档'级别。我也看了看问题,比如How to setup sbt-native-packager in a single module project with multiple mainsHow to create a basic project setup using sbt-native-packager

的工作 离开packageMappings在build.sbt的“主体”不会导致“SBT负载问题”的东西,但我不不知道它是否会真正建立包装!

软件堆栈

  • 操作系统:Mac系统
  • 的Java:1.8.0_74-B02
  • 斯卡拉:2.11.8
  • SBT:0.13.8
  • SBT-本地-packager 1.0.6

回答

0

它看起来像0需要在其设置中为project1project2启用。

尝试通过增加enablePlugins(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 
) 

,也同样项目2

我建议“在行动SBT”,以帮助您开始得到一本书像“简单的“构建工具。

+0

'enablePlugins(SbtNativePackager)'看起来是在一个有趣的地方。你还记得如果你有上面的编译?它是'DslEntry'类型,而不是'Def.SettingsDefinition'。 sbt 0.13.15,sbt-native-packager 1.2.0 – akauppi

相关问题