同一构建中的多个项目(子项目)

有时,构建会合并多个源目录,每个源目录都是自己的项目。例如,你可能有这样的构建结构:

projectName / build.sbt project / src / main / … test / … core / src / main / … test / … webapp / src / main / … test / …

在上面的项目中,projectName/src 中的代码被认为是 root 项目。还有另外两个模块,或子项目corewebapp

配置子项目与配置根项目类似,只是在项目中指定了子目录。此示例显示聚合 corewebapp 项目的根项目。

lazy val root = (project in file(".")).aggregate(core,webapp).dependsOn(core, webapp)

lazy val core = (project in file("core"))

lazy val webapp = (project in file("webapp")).dependsOn(core)

传递给 file() 的值是相对于项目根目录的目录。

webapp 项目取决于 core 项目,该项目由 dependsOn 子句指示,该项目采用上面一行中指定的 core 值。dependsOnlazy 评估确保在项目使用它们之前可以使用依赖项。在这种情况下,webapp 依赖于 core,因此 core 将在构建尝试编译 webapp 之前编译。

aggregate 使一个项目中定义的任务可用于聚合它的项目。例如,在 root 项目中执行 compile 也将在 corewebapp 中执行 compile