2014-01-29 48 views
2

這是關於版本控制和工作流程的問題。SBT如何在依賴關係中選擇最高版本?

我有多個項目

了projectA/build.sbt

version := "1.0.0" 
libraryDependencies ++= Seq(
    "com.example" % "projectB" % "1.0.0", 
    "com.example" % "util" % "1.0.0" 
) 

項目B/build.sbt

version := "1.0.0" 
libraryDependencies ++= Seq(
    "com.example" % "util" % "1.0.0" 
) 

UTIL/build.sbt

version := "1.0.0" 

------------------------ DEVELOPMENT ------------------ ------

我在util中增加了一個方法。

UTIL/build.sbt

version := "2.0.0" 

這個附加功能是偉大的,所以我用它來優化projectB

項目B/build.sbt

version := "1.1.0" 
libraryDependencies ++= Seq(
    "com.example" % "util" % "2.0.0" 
) 

------------------------ DEVELOPMENT ----- -------------------

我想projectA要更快,所以我拉projectB

了projectA/build.sbt

version := "1.1.0" 
libraryDependencies ++= Seq(
    "com.example" % "projectB" % "1.1.0", 
    "com.example" % "util" % "1.0.0" 
) 

------------------------ 問題 ----- -------------------

現在,projectA需要1.0.0util版本,但project B需要util版本2.0.0

我可以更新projectA以使用新版本的util。問題是我需要更新的項目和依賴項的數量可能非常大,並且依賴關係鏈可能很長。 (想象一下projectZ取決於projectAutil。)

有沒有辦法,我可以有我的項目依賴有最低版本的方法嗎?

例如,如果projectA需求util版本1.0.0projectB需求util版本2.0.0projectA會倒閉使用2.0.0版本。

如果是這樣,如果有util的版本3.0.0可用,在這種情況下會發生什麼? projectA將使用2.0.03.0.0結束?

對我來說,如果我可以讓一個項目使用最大版本,從它自己的依賴關係和(遞歸)依賴關係的依賴關係中,但不會高於這個值,那將是理想的。

回答

3

對於我來說,這將是理想的,如果我能有一個項目中使用的最大 版本,從自己的依賴中和(遞歸),其 家屬的依賴,但沒有比這高。

從SBT文件http://www.scala-sbt.org/release/docs/Detailed-Topics/Library-Management.html#conflict-management

衝突經理決定做什麼時,依賴解析 在不同版本的同一個庫的帶來。默認情況下,選擇 最新版本。

這已經是默認行爲。

相同的文件說明如何強制版本,指定最低版本等。

+0

哦,太棒了!並感謝您的鏈接。我習慣了Maven,我相信它採用了最接近的依賴關係指定的版本。這種行爲好得多。 –