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

Maven嵌套依赖版本解析异常求助:okhttp版本不符预期

问题描述

我在模块A中配置了OkHttp 4.9.2的依赖:

<dependencies>
    <dependency>
        <groupId>com.squareup.okhttp3</groupId>
        <artifactId>okhttp</artifactId>
        <version>4.9.2</version>
    </dependency>
</dependecies>

模块B通过以下配置引入模块A:

<dependencies>
    <dependency>
        <groupId>com.example.test</groupId>
        <artifactId>A</artifactId>
        <version>1.01</version>
    </dependency>
</dependecies>

但执行mvn dependency:tree后,模块B的依赖树显示OkHttp版本为3.14.9:

[INFO] com.example.test:B:jar:1.01
[INFO] +- com.example.test:A:jar:1.01:compile
[INFO] |  +- com.squareup.okhttp3:okhttp:jar:3.14.9:compile

已排查排除其他模块的3.14.9版本冲突,不想在所有涉及模块中显式声明OkHttp版本,且仅OkHttp出现此版本解析异常,其余依赖均能正常使用指定版本。

解决方案

1. 修复模块A的POM拼写错误

注意到模块A的POM中<dependecies>标签拼写错误(正确应为<dependencies>),这个错误会导致Maven无法识别该依赖块,模块A实际并未引入OkHttp 4.9.2,而是通过其他传递依赖引入了3.14.9版本。修正拼写后执行mvn clean install重新构建模块A即可。

2. 使用Maven依赖锁定统一版本

在项目的父POM中添加<dependencyManagement>块,强制指定OkHttp的版本,所有子模块会自动继承该版本,无需重复声明:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.squareup.okhttp3</groupId>
            <artifactId>okhttp</artifactId>
            <version>4.9.2</version>
        </dependency>
    </dependencies>
</dependencyManagement>

这种方式会绕过Maven的版本仲裁规则,确保全项目使用指定版本。

3. 排查模块A的传递依赖

在模块A目录下执行以下命令,查看OkHttp依赖的具体来源:

mvn dependency:tree -Dverbose -Dincludes=com.squareup.okhttp3:okhttp

如果发现有其他依赖间接引入了3.14.9版本,可以在模块A的OkHttp依赖中排除该传递依赖:

<dependency>
    <groupId>com.squareup.okhttp3</groupId>
    <artifactId>okhttp</artifactId>
    <version>4.9.2</version>
    <exclusions>
        <exclusion>
            <groupId>com.squareup.okhttp3</groupId>
            <artifactId>okhttp</artifactId>
        </exclusion>
    </exclusions>
</dependency>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 00:55:14