依赖项中的 JUnit 版本错误

Posted

技术标签:

【中文标题】依赖项中的 JUnit 版本错误【英文标题】:Wrong version of JUnit in dependencies 【发布时间】:2019-11-25 02:07:11 【问题描述】:

我想在我的 Spring Boot 应用程序上运行 JUnit 5.4+ 测试,以便我可以在我的测试中使用 @Order 注释。但是,无论我尝试什么,Maven 都会将我的 POM 解析为 5.3.2。 我已经尝试过手动包含我能想到的所有依赖项,但最终我得到了一堆不匹配的版本。我还尝试清除整个 ~/.m2/repository 文件夹并重建树,结果相同。

mvn依赖的相关部分:树

[INFO] +- org.junit.jupiter:junit-jupiter-api:jar:5.5.0:test
[INFO] |  +- org.apiguardian:apiguardian-api:jar:1.1.0:test
[INFO] |  +- org.opentest4j:opentest4j:jar:1.2.0:test
[INFO] |  \- org.junit.platform:junit-platform-commons:jar:1.3.2:test
[INFO] +- org.junit.jupiter:junit-jupiter:jar:5.5.0:test
[INFO] |  +- org.junit.jupiter:junit-jupiter-params:jar:5.3.2:test
[INFO] |  \- org.junit.jupiter:junit-jupiter-engine:jar:5.3.2:test
[INFO] |     \- org.junit.platform:junit-platform-engine:jar:1.3.2:test

pom.xml 的一部分

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>5.5.0</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter</artifactId>
            <version>5.5.0</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>junit</groupId>
                    <artifactId>junit</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.9.2</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <scope>provided</scope>
        </dependency>
    </dependencies>
...
<plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.22.1</version>
            </plugin>
...

5.3.2从何而来?

【问题讨论】:

你能把你遇到的错误贴出来吗? Gradle 5 JUnit BOM and Spring Boot Incorrect Versions的可能重复 【参考方案1】:

将此行添加到 Maven pom.xml 中的属性中:

<junit-jupiter.version>5.5.0</junit-jupiter.version>

这将控制 spring boot poms (org.springframework.boot:spring-boot-dependencies) 中依赖管理中定义的依赖。


原因是:org.springframework.boot:spring-boot-dependencies包含junit-bom

  <dependency>
    <groupId>org.junit</groupId>
    <artifactId>junit-bom</artifactId>
    <version>$junit-jupiter.version</version>
    <type>pom</type>
    <scope>import</scope>
  </dependency>

默认junit-jupiter.version5.3.2。所以只要你不改变junit-jupiter.version,这个bom就会定义所有未显式列出的依赖项(例如org.junit.jupiter:junit-jupiter-params)都是org.junit:junit-bom:5.3.2中定义的版本

【讨论】:

以上是关于依赖项中的 JUnit 版本错误的主要内容,如果未能解决你的问题,请参考以下文章

Vue 3 和 webpack 5 - 错误:“模块属性已从依赖项中删除”

Intellij 错误:无法构建工件“XXX:战争爆炸”,因为它包含在循环依赖项中

为啥有时会跳过 maven 依赖项中的版本号?

mvn 命令用于更新依赖项中的版本和一个使用该依赖项的项目

将 opencv_world400.lib 和 opencv_world400d.lib 添加到依赖项中,仍然出现 LNK2001 错误

eslint 应该列在项目的依赖项中,而不是 devDependencies