是否可以使用sbt创建分层多项目构建?

时间:2017-06-27 07:20:36

标签: scala sbt

我知道之前已经问过这个问题,但是所有这些问题都已删除或者没有得到满意的答案,所以我再次提出问题:

在SBT构建中,是否可以以分层方式安排和定义子项目? e.g:

root
  foo
    foofoo
    foobar
  bar
    barfoo
    barbar

其中每个项目都有自己的build.sbt,但从其顶级(聚合器)项目继承设置(因此foofoofoobar继承foo和{{{ 1}}从foo)继承设置?

Maven有这种可能性,但是对于这个问题,交叉构建非常痛苦,所以我想使用SBT。

如果可以,它是如何完成的?

2 个答案:

答案 0 :(得分:2)

您可以通过配置root project build.sbt 来实现此目的。在您的情况下, build.sbt 看起来如下所示:

lazy val root = (project in file(".")).enablePlugins(PlayScala) //assuming its a play scala project

lazy val foo = project.in(file("<path-to-foo-project>")).dependsOn(root)

lazy val bar = project.in(file("<path-to-bar-project>")).dependsOn(root)

lazy val foofoo = project.in(file("<path-to-foofoo-project>")).dependsOn(foo)

lazy val foobar = project.in(file("<path-to-foobar-project>")).dependsOn(foo)

lazy val barfoo = project.in(file("<path-to-barfoo-project>")).dependsOn(bar)

lazy val barbar = project.in(file("<path-to-barbar-project>")).dependsOn(bar)

答案 1 :(得分:0)

请参阅:https://www.scala-sbt.org/0.13/docs/Multi-Project.html#Default+root+project

您可以在子目录下定义多个sbt文件,并使用root sbt包含它们。它们将自动合并为一个大型sbt以运行。

  

foo中的任何.sbt文件(例如foo / build.sbt)将与   整个构建的构建定义,但范围为hello-foo   项目。