2017-10-19 41 views
3

当我在我的SBT项目执行任务compile,我有以下错误信息:版本冲突:有些被怀疑是二进制不

[warn] Found version conflict(s) in library dependencies; some are suspected to be binary incompatible: 
[warn] * org.typelevel:cats-core_2.12:1.0.0-MF is selected over 0.9.0 
[warn]  +- default:pathservice_2.12:0.1      (depends on 1.0.0-MF) 
[warn]  +- io.circe:circe-core_2.12:0.8.0()     (depends on 0.9.0) 
[warn]  +- co.fs2:fs2-cats_2.12:0.3.0       (depends on 0.9.0) 
[warn] Run 'evicted' to see detailed eviction warnings 
[info] Compiling 3 Scala sources to /home/developer/Desktop/microservices/backup-industry/PathService/target/scala-2.12/classes ... 
[info] Done compiling. 

是什么意思?

回答

3

这意味着你有不同的依赖关系,每个依赖关系使用不同版本的同一个库。也就是说,circe和fs2依赖于猫0.9.0,其中路径服务取决于1.0.0-MF。

现在,由于.ivy的工作方式,最新版本的依赖关系总是在运行时被挑选和加载。这意味着,例如,如果circe依赖于公共方法foo,它在cats 0.9.0中,并且不再在cat 1.0.0-MF(发送的字节码不同)中可用,则程序将引发异常在运行时试图调用foo,因为1.0.0-MF没有它。

+0

另请参阅关于[冲突管理](http://www.scala-sbt.org/release/docs/Library-Management.html#Conflict+Management)的sbt文档 – laughedelic