2014-01-29 44 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,我相信它采用了最接近的依赖关系指定的版本。这种行为好得多。 –