我已经看到了这个问题的近似变体,但没有看到包含所有有用信息的答案。
使用sbt 0.13.13和sbt-assembly 0.14.3,以及基于http://www.scala-sbt.org/0.13/docs/Multi-Project.html的多项目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 += ...
)
这个配置是否足以构建两个独立的罐子?什么是完整的sbt命令来构建每个命令
或者两者都来自命令行?命令sbt projects
仅显示build_jar,因此缺少某些内容。
答案 0 :(得分:2)
很少有评论:
您的项目需要指向不同的路径。目前都指向根目录(file(".")
)。
程序集将可用于两个项目,因此您可以从每个项目调用assembly
命令。
为什么要使用Scala 2.10?至少(如果您在Java 7上的混合Scala / Java项目和堆栈上说),请使用Scala 2.11.8。
如果您希望一个项目对它们进行全局规则,则需要有一个聚合项目。从root用户调用assembly
可以在其他两个项目的每个项目中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 += ...
)