Gradle 5 JUnit BOM 和 Spring 引导版本不正确
Gradle 5 JUnit BOM and Spring Boot Incorrect Versions
我正在使用 Gradle 5 的 BOM(物料清单)feature。这就是我对 JUnit 5 依赖项的描述:
testImplementation(enforcedPlatform("org.junit:junit-bom:5.4.0")) // JUnit 5 BOM
testImplementation("org.junit.jupiter:junit-jupiter-api")
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine")
testImplementation("org.junit.jupiter:junit-jupiter-params")
我的假设是提供 BOM 会将依赖项的版本解析为 5.4.0
。但是,他们解决了 5.1.1
。我不确定为什么。 (我也请求enforcedPlatform()
锁定指定版本)
检查 JUnit 5's BOM 我们看到所有 org.junit.jupiter
依赖项都列出了版本 5.4.0
(在项目中解析为 5.1.1)并且列出了所有 org.junit.platform
依赖项版本 1.4.0
在项目中正确解析。
我不确定我错过了什么,希望能在这里得到一些帮助。谢谢!
编辑:
我使用了 Sormuras 响应并将所有 BOM 移动到 dependencies {}
块的顶部,但仍然没有获得版本 5.4.0
。然后我怀疑它可能来自我使用的 Gradle Spring Dependency Management 插件,所以当我注释掉它时,我得到了 JUnit 5.4.0 版本。如何禁用来自 Gradle Spring 依赖管理插件的 JUnit?
最终:
我决定直接使用 Spring Boot Dependencies BOM 并删除 Gradle 插件:
implementation(platform("org.springframework.boot:spring-boot-dependencies:2.0.5.RELEASE"))
我想该插件是为 Gradle 5 之前的 Gradle 版本创建的,您无法使用 BOM 文件。现在有了 BOM 支持,我可以直接包含它。这样我的 JUnit 版本就是我在 enforcedPlatform()
块中指定的。
我在下面接受了 Sam Brannen 的回答,因为他很好地解释了问题是如何发生的以及解决问题的方法,我认为这与使用旧版本 Gradle 的人有关。
JUnit 5.4.0 简化了它的工件,现在为 Jupiter 提供了一个工件 - org.junit:junit-jupiter
。即,您也应该简化 Gradle 文件:
testImplementation(enforcedPlatform("org.junit:junit-bom:5.4.0")) // JUnit 5 BOM
testImplementation("org.junit.jupiter:junit-jupiter")
确保在之前包含同样引用 JUnit 的其他 BOM。第一个 BOM 获胜并锁定所有后续工件的版本。
有关使用 Maven 和 Spring 启动的类似设置,请参阅此问题:https://github.com/sormuras/junit-platform-maven-plugin/issues/29#issuecomment-456958188
How do I disable JUnit coming from the Gradle Spring Dependency Management plugin?
首先,如果您使用 Spring 中的依赖管理插件,则不应导入 junit-bom
,因为这会导致对这些依赖进行重复(且可能冲突)管理。
除此之外,每当您使用 Spring 的依赖管理插件并想要覆盖托管版本时,您必须通过覆盖 BOM 中定义的版本的确切名称来实现插件。
这在 Spring 引导 for Gradle and for Maven 中有记录。
对于 Spring 引导,JUnit Jupiter 版本的名称是“junit-jupiter.version”。您可以找到 Spring Boot 2.1.2 here.
的所有托管版本的名称
因此,在 Gradle 中,您可以按如下方式覆盖它。
ext['junit-jupiter.version'] = '5.4.0'
.
你可以看到我完全做到了 here。
使用 Maven,您可以按如下方式覆盖它。
<properties>
<junit-jupiter.version>5.4.0</junit-jupiter.version>
</properties>
这里有更多背景信息:https://docs.spring.io/platform/docs/current/reference/html/getting-started-overriding-versions.html
我正在使用 Gradle 5 的 BOM(物料清单)feature。这就是我对 JUnit 5 依赖项的描述:
testImplementation(enforcedPlatform("org.junit:junit-bom:5.4.0")) // JUnit 5 BOM
testImplementation("org.junit.jupiter:junit-jupiter-api")
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine")
testImplementation("org.junit.jupiter:junit-jupiter-params")
我的假设是提供 BOM 会将依赖项的版本解析为 5.4.0
。但是,他们解决了 5.1.1
。我不确定为什么。 (我也请求enforcedPlatform()
锁定指定版本)
检查 JUnit 5's BOM 我们看到所有 org.junit.jupiter
依赖项都列出了版本 5.4.0
(在项目中解析为 5.1.1)并且列出了所有 org.junit.platform
依赖项版本 1.4.0
在项目中正确解析。
我不确定我错过了什么,希望能在这里得到一些帮助。谢谢!
编辑:
我使用了 Sormuras 响应并将所有 BOM 移动到 dependencies {}
块的顶部,但仍然没有获得版本 5.4.0
。然后我怀疑它可能来自我使用的 Gradle Spring Dependency Management 插件,所以当我注释掉它时,我得到了 JUnit 5.4.0 版本。如何禁用来自 Gradle Spring 依赖管理插件的 JUnit?
最终:
我决定直接使用 Spring Boot Dependencies BOM 并删除 Gradle 插件:
implementation(platform("org.springframework.boot:spring-boot-dependencies:2.0.5.RELEASE"))
我想该插件是为 Gradle 5 之前的 Gradle 版本创建的,您无法使用 BOM 文件。现在有了 BOM 支持,我可以直接包含它。这样我的 JUnit 版本就是我在 enforcedPlatform()
块中指定的。
我在下面接受了 Sam Brannen 的回答,因为他很好地解释了问题是如何发生的以及解决问题的方法,我认为这与使用旧版本 Gradle 的人有关。
JUnit 5.4.0 简化了它的工件,现在为 Jupiter 提供了一个工件 - org.junit:junit-jupiter
。即,您也应该简化 Gradle 文件:
testImplementation(enforcedPlatform("org.junit:junit-bom:5.4.0")) // JUnit 5 BOM
testImplementation("org.junit.jupiter:junit-jupiter")
确保在之前包含同样引用 JUnit 的其他 BOM。第一个 BOM 获胜并锁定所有后续工件的版本。
有关使用 Maven 和 Spring 启动的类似设置,请参阅此问题:https://github.com/sormuras/junit-platform-maven-plugin/issues/29#issuecomment-456958188
How do I disable JUnit coming from the Gradle Spring Dependency Management plugin?
首先,如果您使用 Spring 中的依赖管理插件,则不应导入 junit-bom
,因为这会导致对这些依赖进行重复(且可能冲突)管理。
除此之外,每当您使用 Spring 的依赖管理插件并想要覆盖托管版本时,您必须通过覆盖 BOM 中定义的版本的确切名称来实现插件。
这在 Spring 引导 for Gradle and for Maven 中有记录。
对于 Spring 引导,JUnit Jupiter 版本的名称是“junit-jupiter.version”。您可以找到 Spring Boot 2.1.2 here.
的所有托管版本的名称因此,在 Gradle 中,您可以按如下方式覆盖它。
ext['junit-jupiter.version'] = '5.4.0'
.
你可以看到我完全做到了 here。
使用 Maven,您可以按如下方式覆盖它。
<properties>
<junit-jupiter.version>5.4.0</junit-jupiter.version>
</properties>
这里有更多背景信息:https://docs.spring.io/platform/docs/current/reference/html/getting-started-overriding-versions.html