依赖项bar
取决于foo
1.2.3,但该foo
版本有错误,我需要使用版本1.2.2。
我可以使用force()
。
libraryDependencies += "foo" %% "foo" % "1.2.2" force()
docs:
不推荐使用该方法强制修改(不推荐)
注意:强制可能会造成逻辑上的不一致,因此不再推荐使用。
这是否意味着SBT与force()
使用特定版本的依赖关系有不同的,更好的方式?如果是这样,是什么?
或者我是否可以从文档中推断出整个问题是我建议不要提出的问题?
答案 0 :(得分:36)
您可以使用dependencyOverrides:
dependencyOverrides += "foo" %% "foo" % "1.2.2"
无论如何,你并没有避免“逻辑上的不一致”。如果你强制使用一个版本,你必须手动处理与其他库的兼容性,没有办法解决这个问题。
来自文档:
覆盖版本
对于二进制兼容的冲突,sbt提供依赖性覆盖。 它们配置了dependencyOverrides设置,它是一个 ModuleID集。例如,以下依赖项定义 冲突因为spark使用log4j 1.2.16而scalaxb使用log4j 1.2.17:
libraryDependencies ++= Seq( "org.spark-project" %% "spark-core" % "0.5.1", "org.scalaxb" %% "scalaxb" % "1.0.0" )
默认冲突管理器选择最新版本的log4j,1.2.17:
show update [info] compile: [info] log4j:log4j:1.2.17: ... ... [info] (EVICTED) log4j:log4j:1.2.16 ...
更改版本 选中,添加覆盖:
dependencyOverrides += "log4j" % "log4j" % "1.2.16"