You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

遭遇java.lang.NoSuchMethodError:Guava依赖版本问题求助

解决Guava的NoSuchMethodError问题

问题原因

你遇到的java.lang.NoSuchMethodError是因为运行时类路径中存在低版本Guava包:编译阶段你用了高版本Guava(31.1-jre),它包含ImmutableMap.of的12参数重载方法,但运行时加载了旧版本Guava(无该方法),最终导致报错。

核心问题是selenium-java:4.3.0自身依赖了较低版本的Guava,Maven的依赖传递机制让旧版本覆盖了你显式声明的高版本,或者类路径加载顺序优先加载了旧包。


解决方案

1. 排查依赖冲突

执行以下Maven命令查看完整依赖树,定位引入旧版本Guava的依赖:

mvn dependency:tree

在输出中搜索com.google.guava:guava,会看到类似条目:

[INFO] +- org.seleniumhq.selenium:selenium-java:jar:4.3.0:compile
[INFO] |  +- com.google.guava:guava:jar:31.0.1-jre:compile

这里就能明确Selenium依赖的Guava版本。

2. 强制统一Guava版本

在POM中添加dependencyManagement节点,强制所有依赖使用你指定的Guava版本,覆盖传递依赖的版本:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>StorwareTest1</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>18</maven.compiler.source>
        <maven.compiler.target>18</maven.compiler.target>
        <guava.version>31.1-jre</guava.version>
    </properties>

    <!-- 锁定Guava版本,覆盖所有传递依赖 -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.google.guava</groupId>
                <artifactId>guava</artifactId>
                <version>${guava.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>${guava.version}</version>
        </dependency>
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>4.3.0</version>
        </dependency>
    </dependencies>

</project>

3. 清理缓存并重新构建

本地Maven缓存的旧包可能残留问题,执行以下命令清理后重新下载依赖:

mvn clean install -U

额外说明

如果强制使用31.1-jre后出现Selenium兼容性问题,可以换成Selenium 4.3.0官方依赖的Guava版本(如31.0.1-jre),同样通过dependencyManagement锁定即可。

内容的提问来源于stack exchange,提问作者Weronika

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 00:21:41