同一構建中的多個專案(子專案)

有時,構建會合並多個源目錄,每個源目錄都是自己的專案。例如,你可能有這樣的構建結構:

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