添加Guice依赖至POM后触发java.lang.NoSuchMethodError异常(关联Guava方法)
添加Guice依赖至POM后触发java.lang.NoSuchMethodError异常(关联Guava方法)
看起来你碰到了典型的依赖版本冲突问题——虽然你没有直接引入Guava,但Guice和Selenium都依赖它,而且两者依赖的Guava版本不兼容,才导致了这个NoSuchMethodError。
问题根源
错误提示里找不到的ImmutableMap.of重载方法(带12个参数的版本),是Guava特定版本才有的API。当你加入Guice 5.1.0后,它会传递引入一个和Selenium 4.x依赖的Guava版本不一致的包,Maven在解析依赖时可能优先选择了旧版本(或者不匹配的版本),导致Selenium调用这个方法时找不到。
解决方案
这里有几个可行的解决办法,按优先级推荐:
1. 显式引入兼容的Guava版本
在你的POM里直接添加Guava依赖,指定一个同时兼容Guice 5.1.0和Selenium 4.8.1的版本(比如31.1-jre,这个版本适配大部分最新的Selenium和Guice版本),覆盖传递依赖的旧版本:
<dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>31.1-jre</version> </dependency>
2. 排除Guice传递的Guava依赖
如果不想显式引入Guava,也可以在Guice的依赖配置里排除它自带的Guava,让项目使用Selenium依赖的版本:
<dependency> <groupId>com.google.inject</groupId> <artifactId>guice</artifactId> <version>5.1.0</version> <exclusions> <exclusion> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> </exclusion> </exclusions> </dependency>
3. 清理Maven缓存并强制更新
有时候Maven的本地缓存会留存旧的依赖包,导致版本解析异常。可以执行以下命令清理缓存并重新拉取依赖:
mvn clean install -U
关于“昨天降级Selenium有用今天没用”的说明
这种情况大概率是Maven缓存或IDE缓存导致的——可能昨天你的本地缓存里刚好有兼容的Guava版本,今天缓存更新或者引入了其他冲突依赖,就又触发了问题。执行上面的缓存清理命令应该能解决这类偶发问题。
备注:内容来源于stack exchange,提问作者Krato
相关产品推荐
相关产品推荐

