我正在升级一个剧本中的一些库!项目。在这个过程中,我试图像这样解决错误:java.lang.ClassNotFoundException: akka.event.slf4j.Slf4jLoggingFilter
我假设它来自不兼容的传递依赖关系?
但我正在努力有效地使用sbt-dependency-graph来帮助我追踪这个问题。
[info] +-ch.qos.logback:logback-classic:1.1.3
[info] | +-ch.qos.logback:logback-core:1.1.3
[info] | +-org.slf4j:slf4j-api:1.7.21
[info] | +-org.slf4j:slf4j-api:1.7.7 (evicted by: 1.7.21)为什么列出了两个版本的slf4j-api
我假设,较新的版本(1.7.21)优先于1.7.7,但是,为什么在某些情况下,我看到同一依赖项的5个不同版本(除了1个被驱逐):
| | | | +-org.slf4j:slf4j-ext:1.7.12
| | | | +-ch.qos.cal10n:cal10n-api:0.8.1
| | | | +-org.slf4j:slf4j-api:1.6.2 (evicted by: 1.7.21)
| | | | +-org.slf4j:slf4j-api:1.6.4 (evicted by: 1.7.21)
| | | | +-org.slf4j:slf4j-api:1.7.12 (evicted by: 1.7.21)
| | | | +-org.slf4j:slf4j-api:1.7.2 (evicted by: 1.7.21)
| | | | +-org.slf4j:slf4j-api:1.7.21一旦发现冲突--我是否需要升级所有依赖项以使用相同的版本?
有没有其他我应该采取的方法?
发布于 2018-02-16 08:14:31
发现了"the SLF4J API is backward compatible for all versions"。尽管从slf4j调用了java.lang.ClassNotFoundException。所以再深入一点:
Akka友好地提供了binary compatibility rules,它显示了主要版本之间的向后兼容性被违反。
查看依赖关系树,我们看到了akka依赖关系的不同主要版本(2.3.x和2.4.x):com.typesafe.akka:akka-actor_2.11:2.3.13 (evicted by: 2.4.11)和com.typesafe.akka:akka-slf4j_2.11:2.3.13
围绕一个主要版本标准化所有的akka依赖项修复了这个问题:
我们最初的依赖只提供了"com.typesafe.akka" %% "akka-actor" % "2.4.11",而play则传递地提供了"akka-slf4j" % "2.3.13",这破坏了二进制兼容性。
+-com.typesafe.akka:akka-slf4j_2.11:2.3.13 [S]
| +-com.typesafe.akka:akka-actor_2.11:2.3.13 (evicted by: 2.4.11)为akka-slf4j和akka-actor提供相同的主版本解决了这个问题。
https://stackoverflow.com/questions/48798986
复制相似问题