Scala 使用SBT创建多个工件
我已经看到了这个问题的近似变体,但没有找到包含所有有用信息的答案 使用sbt 0.13.13和sbt assembly 0.14.3,以及基于以下内容的多项目build.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: _*).
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
在其他两个项目中(从而创建两个jar)assembly
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将其过滤掉。谢谢你的帮助。:)