我正在使用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 Dependency Management插件的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的用户有关。
答案 0 :(得分:15)
如何禁用来自Gradle Spring Dependency Management插件的JUnit?
对于初学者来说,如果您使用的是Spring的依赖性管理插件,则不应导入junit-bom
,因为这会导致对这些依赖性的重复管理(并且可能会产生冲突)。
除此之外,每当您使用Spring的依赖性管理插件并要覆盖托管版本时,都必须通过覆盖插件所使用的BOM中定义的版本的确切名称来做到这一点。
这在Spring Boot for Gradle和for Maven中有记录。
对于Spring Boot,JUnit Jupiter版本的名称为“ junit-jupiter.version”。您可以找到Spring Boot 2.1.2 here的所有托管版本的名称。
因此,在Gradle中,您可以按以下方式覆盖它。
ext['junit-jupiter.version'] = '5.4.0'
。
您可以看到我确实在这里做了:https://github.com/sbrannen/spring-events/blob/master/build.gradle#L38
使用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
答案 1 :(得分:1)
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")
答案 2 :(得分:1)
确保在其他也引用JUnit的BOM之前,先包含JUnit的BOM。第一个BOM获胜并锁定了所有后续工件的版本。
有关使用Maven和Spring Boot进行类似设置的问题,请参见此问题:https://github.com/sormuras/junit-platform-maven-plugin/issues/29#issuecomment-456958188