同一構建中的多個專案(子專案)
有時,構建會合並多個源目錄,每個源目錄都是自己的專案。例如,你可能有這樣的構建結構:
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。