Maven同名同版本依赖在不同项目中表现异常的问题求助
问题:openapi-generator-support依赖在多JAX-RS环境下的冲突问题
现象
两个独立项目均引入cd.connect.openapi.gensupport:openapi-generator-support:1.4依赖,其中一个运行正常,另一个触发运行时错误:NoSuchFieldError或NoClassDefFoundError。
定位
异常项目中,openapi-generator-support:1.4的ApiClient.java类通过静态初始化块填充异常处理Map时,使用了Response.java的常量,但当前加载的Response.java来自javax.ws.rs.jsr-311 api,其中缺少所需的两个常量,导致报错。
已尝试无效操作
- 重新加载Maven项目
- 删除本地Maven仓库(.m2文件夹)并重新下载依赖
关键差异对比
正常项目
ApiClient.java归属:cd.connect.openapi.gensupport:openapi-generator-support:1.4Response.java归属:jakarta.ws.rs:jakarta.ws.rs-api:2.1.6- 仅存在Jakarta包,ApiClient正确绑定Jakarta版本的Response类
异常项目
ApiClient.java归属:cd.connect.openapi.gensupport:openapi-generator-support:1.4Response.java归属:javax.ws.rs.jsr-311 api- 同时存在Jakarta和Javax包,ApiClient错误绑定到Javax版本的Response类
解决方案
要让异常项目优先使用Jakarta的jakarta.ws.rs-api,可通过以下Maven配置实现:
1. 排除依赖中的JAX-RS(Javax版本)
找到项目中引入javax.ws.rs.jsr-311 api的依赖,在其<dependency>标签内添加排除规则:
<exclusions> <exclusion> <groupId>javax.ws.rs</groupId> <artifactId>jsr311-api</artifactId> </exclusion> </exclusions>
2. 强制指定Jakarta JAX-RS的依赖优先级
在项目的<dependencyManagement>中明确声明jakarta.ws.rs-api的版本,确保Maven优先解析该依赖:
<dependencyManagement> <dependencies> <dependency> <groupId>jakarta.ws.rs</groupId> <artifactId>jakarta.ws.rs-api</artifactId> <version>2.1.6</version> <scope>compile</scope> </dependency> </dependencies> </dependencyManagement>
3. 检查插件的依赖传递
若项目使用了Maven插件(如openapi-generator-maven-plugin),需确保插件不会引入Javax版本的JAX-RS依赖,必要时给插件添加依赖声明:
<plugin> <groupId>org.openapitools</groupId> <artifactId>openapi-generator-maven-plugin</artifactId> <version>你的插件版本</version> <dependencies> <dependency> <groupId>jakarta.ws.rs</groupId> <artifactId>jakarta.ws.rs-api</artifactId> <version>2.1.6</version> </dependency> </dependencies> </plugin>
4. 验证依赖树
执行以下Maven命令查看最终依赖树,确认Javax版本的JAX-RS已被排除,Jakarta版本被正确引入:
mvn dependency:tree -Dincludes=javax.ws.rs,jakarta.ws.rs
内容的提问来源于stack exchange,提问作者KnownUnknown
相关产品推荐
相关产品推荐

