在该项目中,有两个模块:数据和基础设施。
数据模块依赖于基础设施模块。
编译时没有问题,但在运行时,ConsulCache在领事-客户端调用com.google.guava:guava中的Stopwatch.elapsed()方法,这在com.google.guava:guava:22.0中是无参数的,在com.google.guava:guava:26.0-android中是参数。ConsulCache总是指向com.google.guava:guava:26.0-android,而不是com.goog.guava:guava:22.0,这将报告以下异常:
java.lang.NoSuchMethodError: com.google.common.base.Stopwatch.elapsed()Ljava/time/Duration;
at com.orbitz.consul.cache.ConsulCache$1.onComplete(ConsulCache.java:103)因为它是一个maven项目,而且它都是关于自动管理jar包的,所以它会被第三方插件自己自动引用。
如何在不修改源代码的情况下修复此异常?
发布于 2019-01-07 12:30:47
首先,您需要决定是要版本22.0还是版本26.0-android。
然后将一个<dependencyManagment>条目添加到poms (或者更好的公共父pom )中,以管理您想要的版本的com.google.guava:guava。
dependencyManagement (Management)覆盖该依赖项的所有临时找到的版本号。所以你只能得到你选择的版本。
https://stackoverflow.com/questions/54073605
复制相似问题