Recommended way to force a specific version of SBT dependency

你。 提交于 2019-11-29 02:37:45

问题


A dependency bar depends on foo 1.2.3, but that version of foo has a bug and I need to use version 1.2.2.

I can do that with force().

libraryDependencies += "foo" %% "foo" % "1.2.2" force()

That method is not recommended by the docs:

Forcing a revision (Not recommended)

Note: Forcing can create logical inconsistencies so it’s no longer recommended.

Does this mean SBT has a different, better way than force() to use a specific version of a dependency? If so, what?

Or am I to infer from the documentation that this entire problem is one that I'm recommended not to have?


回答1:


you can use dependencyOverrides:

dependencyOverrides += "foo" %% "foo" % "1.2.2"

You're not avoiding "logical inconsistencies" anyway. If you force a version, you have to manually take care of compatibility with other libraries, there's no way out of that.

From the documentation:

Overriding a version

For binary compatible conflicts, sbt provides dependency overrides. They are configured with the dependencyOverrides setting, which is a set of ModuleIDs. For example, the following dependency definitions conflict because spark uses log4j 1.2.16 and scalaxb uses log4j 1.2.17:

libraryDependencies ++= Seq(
  "org.spark-project" %% "spark-core" % "0.5.1",    
  "org.scalaxb" %% "scalaxb" % "1.0.0" ) 

The default conflict manager chooses the latest revision of log4j, 1.2.17:

show update 
[info] compile: 
[info]    log4j:log4j:1.2.17: ... ... 
[info]    (EVICTED) log4j:log4j:1.2.16 ... 

To change the version selected, add an override:

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


来源:https://stackoverflow.com/questions/36501352/recommended-way-to-force-a-specific-version-of-sbt-dependency

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!