Scala 使用SBT创建多个工件

Scala 使用SBT创建多个工件,scala,sbt,sbt-assembly,Scala,Sbt,Sbt Assembly,我已经看到了这个问题的近似变体,但没有找到包含所有有用信息的答案 使用sbt 0.13.13和sbt assembly 0.14.3,以及基于以下内容的多项目build.sbt: lazy val commonSettings = Seq( version := "2.3.0", scalaVersion := "2.10.6" ) lazy val config_jar = (project in file(".")). settings(commonSettings: _*).

我已经看到了这个问题的近似变体,但没有找到包含所有有用信息的答案

使用sbt 0.13.13和sbt assembly 0.14.3,以及基于以下内容的多项目build.sbt:

lazy val commonSettings = Seq(
  version := "2.3.0",
  scalaVersion := "2.10.6"
)

lazy val config_jar = (project in file(".")).
  settings(commonSettings: _*).
  settings(
    name := "myapp-config",
    test in assembly := {},
    assemblyJarName in assembly := "myapp-config.jar",
    includeFilter in Compile := "myapp.conf"
  )

lazy val build_jar = (project in file(".")).
  settings(commonSettings: _*).
  settings(
    name := "myapp",
    excludeFilter in Compile := "myapp.conf",
    libraryDependencies += ...
  )
这是否足以构建两个独立的jar?用于构建每个组件的完整sbt命令是什么 还是从命令行同时执行?命令
sbt projects
仅显示build\u jar,因此缺少一些内容。

很少有注释:

  • 您的项目需要指向不同的路径。目前两者都指向根目录(
    文件(“.”

  • Assembly将可用于两个项目,因此您可以从每个项目调用
    Assembly
    命令

  • 为什么要使用Scala 2.10?至少(如果您是在混合Scala/Java项目和Java 7上的堆栈上)使用Scala 2.11.8

  • 如果希望一个项目对所有项目进行管理,则需要有一个聚合项目。从根目录调用
    assembly
    将可以
    assembly
    在其他两个项目中(从而创建两个jar)

所以我会写:

lazy val commonSettings = Seq(
  version := "2.3.0",
  scalaVersion := "2.10.6"
)

lazy val root = (project in file(".")).aggregate(config_jar, build_jar)   

lazy val config_jar = (project in file("config")).
  settings(commonSettings: _*).
  settings(
    name := "myapp-config",
    test in assembly := {},
    assemblyJarName in assembly := "myapp-config.jar",
    includeFilter in Compile := "myapp.conf"
  )

lazy val build_jar = (project in file("build")).
  dependsOn(config_jar).
  settings(commonSettings: _*).
  settings(
    name := "myapp",
    assemblyMergeStrategy in assembly := { file =>
        if(file.startsWith("config\\")) MergeStrategy.discard else MergeStrategy.defaultMergeStrategy(file)
    },
    libraryDependencies += ...
  )

Scala 2.10-我想使用最新和最好的。此版本适用于Azure上运行的Spark应用程序。据我所知,他们的云限制为Spark 1.6.3,Scala 2.10。在我的清单上,如果可能的话可以升级。项目本身目前是单个项目。我希望找到一种方法,从现有的单个项目中构建两个工件。我还没有研究过在两个项目中打破它来实现这一点,但如果这是唯一的方法,我会的。我想你可能会有一个火花限制,并留在2.10。至于这两个子项目,我认为这是您需要做的最好的解决方案。这非常接近,只是build\u jar需要dependsOn(config\u jar)才能运行所有测试。因此,config_jar中的文件包含在build_jar中,即使指定了excludeFilter将其过滤掉。谢谢你的帮助。:)