升级Spring Boot 3.2.2与Java 21后Dropbox API出现LinkageError问题
Spring Boot 3.2.2 + Java 21升级后Dropbox API类加载冲突解决方案
问题根源
Spring Boot 3.x基于Jakarta EE 9+,所有原javax.*命名空间的API已迁移至jakarta.*,而你使用的resteasy-jaxrs 3.15.6和dropbox-sign 1.2.0仍依赖旧的Java EE(javax.ws.rs)API,导致类加载器加载同一逻辑类时出现命名空间/类加载器冲突,触发LinkageError(看似同一个类互相转换,实际是不同类加载器加载的同名类)。
解决步骤
1. 替换Resteasy为Jakarta兼容版本
移除旧的resteasy-jaxrs,改用支持Jakarta EE的Resteasy核心依赖,版本需匹配Spring Boot 3.2.x(推荐6.2.x+,支持Java 17/21):
<!-- 移除旧依赖 --> <!-- <dependency> <groupId>org.jboss.resteasy</groupId> <artifactId>resteasy-jaxrs</artifactId> <version>3.15.6.FINAL</version> </dependency> --> <!-- 添加Jakarta版本的Resteasy依赖 --> <dependency> <groupId>org.jboss.resteasy</groupId> <artifactId>resteasy-core</artifactId> <version>6.2.9.Final</version> </dependency> <dependency> <groupId>org.jboss.resteasy</groupId> <artifactId>resteasy-client</artifactId> <version>6.2.9.Final</version> </dependency>
或者直接使用Spring Boot官方starter,自动管理版本:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-resteasy</artifactId> </dependency>
2. 升级Dropbox Sign SDK至Jakarta兼容版本
dropbox-sign 1.2.0版本过旧,不支持Jakarta EE,需升级至最新兼容版本(当前最新为7.1.0):
<dependency> <groupId>com.dropbox.sign</groupId> <artifactId>dropbox-sign</artifactId> <version>7.1.0</version> </dependency>
3. 强制排除旧的javax依赖(若仍有冲突)
若升级后仍存在依赖冲突,执行mvn dependency:tree排查所有javax.ws.rs相关依赖,手动排除并替换为Jakarta API:
<dependency> <groupId>com.dropbox.sign</groupId> <artifactId>dropbox-sign</artifactId> <version>7.1.0</version> <exclusions> <exclusion> <groupId>javax.ws.rs</groupId> <artifactId>javax.ws.rs-api</artifactId> </exclusion> <exclusion> <groupId>javax.annotation</groupId> <artifactId>javax.annotation-api</artifactId> </exclusion> </exclusions> </dependency> <!-- 添加Jakarta EE标准API --> <dependency> <groupId>jakarta.ws.rs</groupId> <artifactId>jakarta.ws.rs-api</artifactId> <version>3.1.0</version> </dependency>
4. 验证依赖树
执行mvn dependency:tree命令,确保输出中无javax.ws.rs相关依赖,所有JAX-RS类均来自jakarta.ws.rs命名空间。
内容的提问来源于stack exchange,提问作者Yasmeen
相关产品推荐
相关产品推荐

