同一构建中的多个项目(子项目)
有时,构建会合并多个源目录,每个源目录都是自己的项目。例如,你可能有这样的构建结构:
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
。