假設我公司的一個人有一個名爲commons
的sbt項目,這個項目非常通用。這個項目是以傳統的方式定義的:在project/Build.scala
文件中具有構建定義的主文件夾中。如何指定構建項目另一個項目B必須先構建?
現在一些其他人正在開發一個名爲databinding
的項目,該項目取決於commons
。我們想用project/Build.scala
來定義這個項目。
我們有以下的目錄佈局:
dev/
commons/
src/
*.scala files here...
project/
Build.scala
databinding/
src/
*.scala files here...
project/
Build.scala
我怎麼可以指定databinding
需要commons
興建第一和使用輸出類文件?
我讀Multi-project builds,並與中databinding
構建定義如下上來:
object MyBuild extends Build {
lazy val root = Project(id = "databinding", base = file(".")) settings (
// ... omitted
) dependsOn (commons)
lazy val common = Project(id = "commons",
base = file("../commons")
)
}
除非它不工作:SBT不喜歡..
並拋出一個AssertionError。顯然,commons
應該是databinding
內的文件夾。但是這兩個項目保存在單獨的git倉庫中,我們不能嵌套。
如何正確指定這種依賴關係?
非常感謝您的解釋,大衛樣品。這看起來很奇怪,是不是因爲其他項目使用我的項目'commons',它不能在'.scala'文件中有完整的定義? –
而且,是否有其他選擇 - 例如,添加一個解析器來查找它依賴的項目生成的jar文件? –
關於你的第一個問題,這是一個阻止你使用'*的SBT限制。scala'文件來定義子項目。我認爲這是SBT合併項目定義文件的一個限制。幸運的是,'* .sbt'文件將能夠從您的根項目'Build.scala'中訪問vals,settings ...。你也可以考慮如你在第二個評論中提到的那樣,例如在本地發佈你的'common'(發佈 - 本地),解析器應該檢索它。如果您想使用SNAPSHOT系統,請注意將isChanging()添加到依賴關係定義中。希望這會有所幫助。 – David