2012-10-06 82 views
13

我有一組鬆散相關的組件,其中一些依賴於其他組件。具體來說,假設我們有組件「common」,「a」和「b」。 「common」不具有任何依賴性,但所有其他項目都使用「common」。此外,「a」取決於「b」。所有的組件都是用Scala編寫的,我想用sbt來構建它們。SBT:不依賴於其他SBT項目而沒有發佈

以下屬性將是不錯的有:

  1. 多的人在不同項目的工作,這就是爲什麼我們不希望有一個單一的儲存庫,而是每個項目一個資料庫。
  2. 構建一個項目應該很容易,並且所有依賴關係都應該自動生成(如果需要的話)。也就是說,如果我修改「common」然後build「b」,這應該先構建「common」,然後繼續構建「b」。
  3. 能夠在IDE中擁有所有項目,以便重構和類似的IDE任務正常工作,並且所有受影響的項目都能正確更改。

據我所知,在這種類型的依賴關係中有兩種可能性:要麼我們使用子項目,要麼使用託管依賴項(將其推送到某處,例如本地)。但是,似乎這兩個選項都不能提供上面的(1)或(2)。尤其是

  • 使用子項目迫使我們使用單個存儲庫,因爲所有子項目都必須位於主項目的子目錄中。
  • 本地發佈的項目和使用管理的依賴很麻煩,因爲不斷變化的「共同」,然後建立「B」只有在該項目是建立並首次公佈拿起「共同」的轉變。我可以看到託管依賴對許多情況很有用,但對於我們的特定用例,它們似乎並不能很好地工作。我們經常在幾個項目上工作,並同時進行更改。出於這個原因,經常出版似乎過於複雜。

難道真的沒有辦法說的SBT項目依賴於另一個項目SBT在一定的(相對)的位置,並具有SBT數字出來的時候建的依賴?

回答

6

使用SBT,您可以使用源依賴項。

lazy val root = Project("root", file("."), settings = ...) dependsOn(dispatchLiftJson) 

lazy val dispatchLiftJson = uri("git://github.com/dispatch/dispatch-lift-json#0.1.0") 

在本例中它將從git中獲取。您可能能夠在磁盤上指定文件位置,但我找不到示例。利用發佈本地方法,好的工作目前IM - 可能

lazy val dep = file("/path/to") 

lazy val dep = uri("file:///path/to") 

我與這個自己奮鬥。

+1

'lazy val dep = uri(「file:/// path/to」)'適用於我。相對路徑也適用。實例:'懶惰VAL helloWorldProj = URI( 「文件:/// d:/ EclipseProjects/HelloWorld」 的)'OR '懶惰VAL helloWorldProj = URI( 「../的HelloWorld」)' – dips

+0

而這些必須被添加到該如果我沒有錯,build.sbt文件? –