Sbt 如何强制依赖项的特定版本?

Sbt 如何强制依赖项的特定版本?,sbt,Sbt,依赖项bar依赖于foo1.2.3,但该版本的foo有一个bug,我需要使用版本1.2.2 我可以用force()来实现这一点 以下机构不推荐使用该方法: 强制修订(不推荐) 注意:强制可能会造成逻辑不一致,因此不再推荐使用 这是否意味着SBT有一种不同于force()的更好的方法来使用依赖项的特定版本?如果是,什么 或者我可以从文档中推断出整个问题是我不建议遇到的问题吗?您可以使用: 无论如何,你都不能避免“逻辑不一致”。如果强制使用某个版本,则必须手动处理与其他库的兼容性,这是没有出路的 从

依赖项
bar
依赖于
foo
1.2.3,但该版本的
foo
有一个bug,我需要使用版本1.2.2

我可以用
force()
来实现这一点

以下机构不推荐使用该方法:

强制修订(不推荐)

注意:强制可能会造成逻辑不一致,因此不再推荐使用

这是否意味着SBT有一种不同于
force()
的更好的方法来使用依赖项的特定版本?如果是,什么

或者我可以从文档中推断出整个问题是我不建议遇到的问题吗?

您可以使用:

无论如何,你都不能避免“逻辑不一致”。如果强制使用某个版本,则必须手动处理与其他库的兼容性,这是没有出路的

从文件中:

重写版本

对于二进制兼容冲突,sbt提供依赖项重写。 它们使用dependencyOverrides设置进行配置,该设置是 模块的集合。例如,以下依赖项定义 冲突,因为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:

libraryDependencies ++= Seq(
  "org.spark-project" %% "spark-core" % "0.5.1",    
  "org.scalaxb" %% "scalaxb" % "1.0.0" ) 
show update 
[info] compile: 
[info]    log4j:log4j:1.2.17: ... ... 
[info]    (EVICTED) log4j:log4j:1.2.16 ... 
更改版本 选中后,添加替代:

dependencyOverrides += "log4j" % "log4j" % "1.2.16"

请不要忘记结尾的这句简短的评论。
注意:这是一项仅限于常春藤的功能,不会包含在已发布的pom.xml中。
尝试
库依赖项:=Set()
dependencyOverrides++=Set(…foo…
如果这对任何人都不起作用,请尝试添加dependencyOverrides+=“…foo…””就像这样:@EugenePlatonov,没关系。它将与多个覆盖混淆;我只需要一个逃生舱。
dependencyOverrides += "log4j" % "log4j" % "1.2.16"