Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
588 views
in Technique[技术] by (71.8m points)

sbt - How to force a specific version of dependency?

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?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

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"

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...