2015-08-18 176 views
2

我是新來的Scala,所以我希望這個問題不是太天真。sbt多模塊項目:依賴項目

假設我有multi-module sbt-project並且項目之間存在依賴關係。

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

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

的問題,並.dependsOn(core)意味着,如果我做projects utils; compile它會compilecore事先(並使用其最新版本)?

我在問這個,因爲在實踐中我沒有看到這種行爲(我想要它)。

回答

2

您在尋找aggregate方法。就像這樣:

lazy val utils = (project in file("utils")). 
    settings(...).dependsOn(core).aggregate(core) 

這裏聚集方法將導致對utils運行所有任務,也可以在core運行(更新等)。如果你想禁止一個任務在一個聚合項目上運行,你可以檢查出the documentation here

+0

謝謝!所以添加了'聚合'選項,它的工作;但是如果現在在'utils'裏面,我會發布本地文件嗎?是''發佈'包會包括'核心'? – Daniel

+0

發佈的包將始終包含核心,因爲您依賴它。如果你這樣離開,'publish'命令也會在'core'上運行。您可以禁用在其他項目上運行的特定命令。我將用這些信息和相關文件的鏈接更新我的答案。 – Asa

2

是的,你應該看到這種行爲(我在實踐中看到它)。作爲鏈接的文件說,(注意,utilcore的角色是有相反:core取決於util):

這也造成編譯時他們的項目之間的排序; util必須在覈心編譯之前更新和編譯

+0

其他回答說'聚合'設置怎麼樣?你對此有何看法? – Daniel

+0

另外我不明白你爲什麼說依賴是相反的;像在這裏的文檔中說的那樣 「'foo dependsOn(bar)'意味着'foo'中的編譯配置取決於'bar'中的編譯配置。」 http://www.scala-sbt.org/0.13/tutorial/Multi-Project.html – Daniel

+0

使用相同的邏輯'utils'取決於'core'。我對麼? – Daniel

相關問題