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

移除tinify依赖后mvn test报gson的NoClassDefFoundError,如何使用aem-sdk-api中的gson?

问题描述

项目原本包含以下两个Maven依赖:

<dependency>
    <groupId>com.adobe.aem</groupId>
    <artifactId>aem-sdk-api</artifactId>
    <version>${aem.sdk.api}</version>
    <scope>provided</scope>
</dependency>

<dependency>
    <groupId>com.tinify</groupId>
    <artifactId>tinify</artifactId>
    <version>1.6.4</version>
    <scope>provided</scope>
</dependency>

测试类依赖com.adobe.aem包中的Gson(IDE显示该依赖关系),此前无论是IDE运行测试,还是执行mvn clean install都能正常完成。

但移除com.tinify依赖后,IDE运行测试仍正常,执行mvn clean install或mvn test时却抛出Gson相关的NoClassDefFoundError:

java.lang.NoClassDefFoundError: com/google/gson/internal/LinkedTreeMap
    at com.......

保留tinify依赖时,执行mvn dependency:tree可看到它间接依赖了com.google.code.gson:gson:2.8.5。已知com.adobe.aem本身也包含Gson包,现在需要让Maven优先使用com.adobe.aem中的Gson。

解决方案

可以通过以下几种方式实现需求:

1. 显式声明Gson的测试范围依赖

直接在pom.xml的<dependencies>块中添加Gson依赖,指定scope=test,无需手动指定版本——Maven会自动从com.adobe.aem的传递依赖中继承对应版本:

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <scope>test</scope>
</dependency>

这样Maven在测试阶段就能正确加载Gson包,解决NoClassDefFoundError问题。

2. 用dependencyManagement锁定Gson版本

如果com.adobe.aem提供的Gson版本与tinify依赖的版本不同,可以在pom.xml的<dependencyManagement>中锁定Gson版本为com.adobe.aem对应的版本,强制Maven使用该版本:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <!-- 替换为com.adobe.aem依赖的Gson实际版本号 -->
            <version>x.x.x</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

之后再在<dependencies>中添加Gson的test范围依赖即可。

3. 理解provided范围的影响

aem-sdk-api的依赖范围是provided,Maven默认不会在测试阶段引入其传递依赖。IDE能正常运行测试是因为IDE自动将provided依赖加入了测试类路径,但Maven严格遵循依赖范围规则。显式声明Gson为test范围,本质是让Maven在测试阶段主动加载这个依赖,弥补provided范围的限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 08:00:53