okhttp3 mockwebserver 的 Maven 依赖项版本错误

Maven dependencies wrong version for okhttp3 mockwebserver

我正在尝试将 okhttp3.mockwebserver 与我的 Spring 引导项目一起使用,我发现包含 okhttp3:mockwebserver:jar:3.14.9 而不是 4.9.1.

我创建了小型 'mock' 项目来重现我在产品中遇到的问题。

项目在这里https://github.com/mkarasik/okhttp-test

它包含两个文件夹:

这是一个简单的库,包括 mockwebserver 作为依赖项

pom.xml依赖

    <dependencies>
    ...
    <dependency>
        <groupId>com.squareup.okhttp3</groupId>
        <artifactId>mockwebserver</artifactId>
        <version>4.9.1</version>
        <exclusions>
            <exclusion>
                <artifactId>junit</artifactId>
                <groupId>junit</groupId>
            </exclusion>
        </exclusions>
    </dependency>
</dependencies>

Maven 依赖关系树

 \- com.squareup.okhttp3:mockwebserver:jar:4.9.1:compile
    +- com.squareup.okhttp3:okhttp:jar:3.14.9:compile

这已经错了。 Mockwebserver pom 包含 4.9.1 okhttp 工件,但是 3.14.9 显示在 tree

项目

简单Spring 包含 lib 项目的启动应用程序

    <dependency>
        <groupId>com.example</groupId>
        <artifactId>lib</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <scope>test</scope>
    </dependency>

Maven 依赖关系树

\- com.example:lib:jar:0.0.1-SNAPSHOT:test
   \- com.squareup.okhttp3:mockwebserver:jar:3.14.9:test
      \- com.squareup.okhttp3:okhttp:jar:3.14.9:test
         \- com.squareup.okio:okio:jar:1.17.2:test

同样的问题在这里。包含 okhttp3:mockwebserver:jar:3.14.9 而不是 4.9.1,因为它在我的库 pom.xml.

中指定

我的 xml 配置中是否缺少任何内容?

找到了,它在

中有描述
<properties>
    <okhttp3.version>4.9.1</okhttp3.version>
</properties>

解决了问题

OkHttp 提供了一个 Maven BOM,您可以使用它来确保版本一致

https://github.com/square/okhttp#releases

Also, we have a bill of materials (BOM) available to help you keep OkHttp artifacts up to date and be sure about version compatibility.

这个例子是gradle,但是你它本来就是maven的特性

https://docs.gradle.org/6.2/userguide/platforms.html#sub:bom_import

dependencies {
   // define a BOM and its version
   implementation(platform("com.squareup.okhttp3:okhttp-bom:4.9.3"))

   // define any required OkHttp artifacts without version
   implementation("com.squareup.okhttp3:okhttp")
   implementation("com.squareup.okhttp3:logging-interceptor")
}