【发布时间】:2023-02-20 14:48:55
【问题描述】:
我当前的设置中有以下两个依赖项。
<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 包,我从 pom.xml 中删除了这个依赖项。
从 IDE 运行测试(右键单击并执行测试)工作正常,但是当我执行 mvn clean install 或 mvn test 时,我得到 gson 库的 NoClassDefFoundError。
java.lang.NoClassDefFoundError: com/google/gson/internal/LinkedTreeMap
at com.......
使用com.tinify包运行mvn dependency:tree给了我这个
[INFO] +- com.tinify:tinify:jar:1.6.4:provided
[INFO] | +- com.squareup.okhttp3:okhttp:jar:3.10.0:provided
[INFO] | | \- com.squareup.okio:okio:jar:1.14.0:provided
[INFO] | \- com.google.code.gson:gson:jar:2.8.5:provided
据我所知,mvn 使用com.tinify 包中的 gson 库,删除它会导致此异常。但是 com.adobe.aem 依赖项还包含 gson 包。
如何让 mvn 使用 com.adobe.aem 包中的 gson 库?
【问题讨论】:
-
依赖范围的配置不同。
-
可能 Tinify 将其 GSON 依赖范围设置为可传递,而 Adobe 已将 GSON 设置为提供。作为衡量标准,您应该考虑自己提供 GSON 依赖项。
-
显然
aem-sdk-api是一个具有依赖关系的 JAR。不确定这是否是这个特定问题的原因,但你肯定会有更多乐趣由于这个在未来。最好澄清一下为什么 Adobe 将其作为依赖于 Maven 的 JAR 进行分发,因为这违背了使用 Maven 作为依赖性管理工具的目的。