运行Selenium时遇com.google.common.collect.ImmutableMap.of方法不存在错误
问题分析与解决方案
问题重现
运行代码:
WebDriverManager.chromedriver().setup(); driver = new ChromeDriver();
触发错误:
java.lang.NoSuchMethodError: com.google.common.collect.ImmutableMap.of( java.lang.Object, java.lang.Object, java.lang.Object, java.lang.Object, java.lang.Object, java.lang.Object, java.lang.Object, java.lang.Object, java.lang.Object, java.lang.Object, java.lang.Object, java.lang.Object,) com.google.common.collect.ImmutableMap, at org.openqa.selenium.chrome.AddHasCasting.getAdditionalCommands(AddHasCasting.java:38) at org.openqa.selenium.chrome.ChromeDriver$ChromeDriverCommandExecutor.getExtraCommands(ChromeDriver.java:99) at org.openqa.selenium.chrome.ChromeDriver$ChromeDriverCommandExecutor.<init>(ChromeDriver.java:94) at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:82) at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:50) ...
该错误本质是Guava版本不兼容:Selenium 4.8.1需要特定版本的Guava提供ImmutableMap.of的重载方法,但项目中实际引入的Guava版本缺失该方法。
解决方案
1. 显式引入Guava依赖
你仅在dependencyManagement中锁定了Guava版本,但未在dependencies块中显式声明依赖,导致Maven未主动引入指定版本的Guava。在pom.xml的<dependencies>中添加:
<dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>31.0.1-jre</version> </dependency>
2. 排查并解决依赖冲突
执行Maven命令检查依赖树,确认是否有其他依赖引入了旧版本Guava:
mvn dependency:tree
若发现旧版本Guava,可在对应依赖中添加排除规则,例如:
<exclusion> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> </exclusion>
3. 清理并重建项目
执行以下命令清理Maven缓存,强制更新依赖并重新构建:
mvn clean install -U
4. 验证环境兼容性
你的Java 1.8.0_351与Guava 31.0.1-jre版本兼容,无需调整Java环境。
内容的提问来源于stack exchange,提问作者StockBreak
相关产品推荐
相关产品推荐

