使用 sbt 进行多项目构建
Posted
技术标签:
【中文标题】使用 sbt 进行多项目构建【英文标题】:using sbt for multi project build 【发布时间】:2015-03-11 20:49:04 【问题描述】:我对 SBT 完全陌生。假设我有三个 Scala 项目:project_a、project_b、project_c。我应该如何将所有三个项目构建到一个 jar 文件中?假设我使用 project_a 作为根项目。目录结构是这样的
--project_a
--build.sbt
--project_b
--project_c
按照 sbt webiste 上的说明,我创建了一个 build.sbt 文件,看起来像
lazy val root = (project.in(file("."))).aggregate(project_b, project_c)
lazy val project_b = project
lazy val project_c = project
我把 build.sbt 放在 project_a 下。当我在 project_a 下运行 sbt clean compile 时,会在文件夹 project_a 下创建一个新的(有点空的)project_b 和 project_c 文件夹。但是,在 build.sbt 文件中,我的意思是 project_b 和 project_c 指的是我已经创建的包含源代码和测试代码的原始文件夹,并且它们在 project_a 之外。
谁能告诉我我做错了什么?
谢谢
【问题讨论】:
【参考方案1】:首先,您的multi-project 设置不正确。
入门指南说:
如果您有使用聚合意味着在聚合项目上运行任务也会在聚合项目上运行。
project_b
和project_c
的project_a
,那么您需要root
除了到project_a
、project_b
和project_c
。李>
Root 可以聚合所有三个(a、b 和 c),但它只聚合提供给 sbt shell 的命令,例如同时编译所有三个。
project_a
应设置为依赖于 project_b
和 project_c
。
这是一个例子:
lazy val commonSettings = Seq(
scalaVersion := "2.11.4",
organization := "com.example"
)
lazy val root = (project in file(".")).
aggregate(project_a, project_b, project_c).
settings(commonSettings: _*)
lazy val project_a = project.
dependsOn(project_b, project_c).
settings(commonSettings: _*).
settings(
// your settings here
)
lazy val project_b = project.
settings(commonSettings: _*)
lazy val project_c = project.
settings(commonSettings: _*)
我应该如何将所有三个项目构建到一个 jar 文件中?
-
如果您只需要自己项目中的 *.class 文件,您可以在 Macro Projects 上查看示例。
如果你想要 *.class 文件和库依赖,你需要 sbt-assembly。
【讨论】:
以上是关于使用 sbt 进行多项目构建的主要内容,如果未能解决你的问题,请参考以下文章
sbt 插件和使用插件本身的多项目构建中的项目之间的相互依赖关系