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

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.4
  • Response.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.4
  • Response.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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 06:55:25