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

升级Gson至2.9.0后JUnit4调用create()抛出NoSuchMethodError如何解决

问题原因

这是典型的Maven依赖冲突问题,和你写的Gson初始化代码本身没有关系。
你虽然在pom中显式声明了Gson 2.9.0版本,但测试运行时的类路径里存在优先级更高的旧版Gson包:编译阶段用的是2.9.0的类结构(所以编译不报错),运行时类加载器先加载到了旧版本的Gson类,而旧版本里com.google.gson.internal.ConstructorConstructor类不存在你当前调用的构造方法,就抛出了NoSuchMethodError。

排查方法

执行Maven依赖树分析命令,定位是哪个依赖传递引入了低版本Gson:

mvn dependency:tree -Dincludes=com.google.code.gson:gson

命令输出结果里会列出所有引入Gson的依赖路径,你可以直接看到除了你自己声明的2.9.0之外,哪个依赖拉了低版本的Gson进来。

修复方案

二选一即可,多模块项目优先选第二种:

  • 方案1:在传递引入低版本Gson的依赖上添加排除规则,示例:
<dependency>
    <!-- 替换为你排查到的引入低版本gson的依赖坐标 -->
    <groupId>对应依赖的groupId</groupId>
    <artifactId>对应依赖的artifactId</artifactId>
    <version>对应依赖的版本</version>
    <exclusions>
        <exclusion>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
        </exclusion>
    </exclusions>
</dependency>
  • 方案2:在项目pom的dependencyManagement节点中全局锁定Gson版本为2.9.0,强制所有模块、所有传递依赖都使用这个版本的Gson,配置如下:
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.9.0</version>
        </dependency>
    </dependencies>
</dependencyManagement>
验证操作

配置修改完成后,先执行mvn clean清理旧的编译产物,刷新Maven依赖后重新运行JUnit测试用例即可。如果是在Eclipse/IDEA等IDE中运行,记得同步刷新IDE的Maven依赖缓存,避免IDE还引用旧的本地jar包。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 04:48:03