同一构建中的多个项目(子项目)
有时,构建会合并多个源目录,每个源目录都是自己的项目。例如,你可能有这样的构建结构:
projectName / build.sbt project / src / main / … test / … core / src / main / … test / … webapp / src / main / … test / …
在上面的项目中,projectName/src 中的代码被认为是 root 项目。还有另外两个模块,或子项目,core 和 webapp。
配置子项目与配置根项目类似,只是在项目中指定了子目录。此示例显示聚合 core 和 webapp 项目的根项目。
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 值。dependsOn 和 lazy 评估确保在项目使用它们之前可以使用依赖项。在这种情况下,webapp 依赖于 core,因此 core 将在构建尝试编译 webapp 之前编译。
aggregate 使一个项目中定义的任务可用于聚合它的项目。例如,在 root 项目中执行 compile 也将在 core 和 webapp 中执行 compile。