Spring Boot gradle 插件强制 Mockito 版本
Posted
技术标签:
【中文标题】Spring Boot gradle 插件强制 Mockito 版本【英文标题】:Spring boot gradle plugin forces Mockito version 【发布时间】:2016-05-05 11:16:03 【问题描述】:我大致有以下设置:
test-utils/build.gradle:
buildscript
repositories
jcenter()
dependencies
classpath 'org.springframework.boot:spring-boot-gradle-plugin:1.3.1.RELEASE'
apply plugin: 'java'
apply plugin: 'spring-boot'
dependencies
compile ('org.springframework.boot:spring-boot-starter-test')
exclude group: 'org.mockito'
exclude group: 'org.hamcrest'
compile 'org.mockito:mockito-core:2.0.41-beta'
compile 'org.assertj:assertj-core:3.3.0'
main/build.gradle:
buildscript
repositories
jcenter()
dependencies
classpath 'org.springframework.boot:spring-boot-gradle-plugin:1.3.1.RELEASE'
apply plugin: 'java'
apply plugin: 'spring-boot'
dependencies
testCompile project(':test-utils')
但由于某种原因,spring boot 插件似乎强制将 mockito 版本恢复为 1.x:
# ./gradlew :main:dependencies --configuration=testCompile
testCompile - Compile classpath for source set 'test'.
+--- project :test-utils
+--- org.springframework.boot:spring-boot-starter-test: -> 1.3.1.RELEASE
| +--- junit:junit:4.12
| +--- org.springframework:spring-core:4.2.4.RELEASE
| \--- org.springframework:spring-test:4.2.4.RELEASE
| \--- org.springframework:spring-core:4.2.4.RELEASE
+--- org.mockito:mockito-core:2.0.41-beta -> 1.10.19
| +--- org.hamcrest:hamcrest-core:1.1 -> 1.3
| \--- org.objenesis:objenesis:2.1
\--- org.assertj:assertj-core:3.3.0
如果我将 spring boot 插件排除在外,事情就会按预期工作:
# ./gradlew :main:dependencies --configuration=testCompile
testCompile - Compile classpath for source set 'test'.
+--- project :test-utils
+--- org.springframework:spring-core:4.2.4.RELEASE (*)
+--- org.springframework:spring-test:4.2.4.RELEASE
| \--- org.springframework:spring-core:4.2.4.RELEASE (*)
+--- junit:junit:4.12
+--- org.mockito:mockito-core:2.0.41-beta
| +--- net.bytebuddy:byte-buddy:1.0.2
| \--- org.objenesis:objenesis:2.1
\--- org.assertj:assertj-core:3.3.0
spring boot 插件到底在做什么,我怎么能告诉它不要呢?
【问题讨论】:
【参考方案1】:你的main
项目应用了 Spring Boot 的插件,所以它使用了 Spring Boot 的依赖管理。这意味着它将默认使用 Spring Boot 的首选 Mockito 版本,而与 test-utils
中指定的版本无关。
作为described in the documentation,您可以通过设置相关属性来覆盖 Spring Boot 管理的依赖项的版本。对于 Mockito,该属性是 mockito.version
。将以下内容添加到您的 main
项目中:
ext['mockito.version'] = '2.0.41-beta'
【讨论】:
我只知道答案将包括“如文档中所述”命中... :-/。我用“spring boot gradle”搜索了很多,但现在我知道答案在“Build”下,我注意到this 与here 相距一键。叹息。【参考方案2】:我认为你可以使用配置设置来强制版本
allprojects
configurations.all
resolutionStrategy rs ->
rs.force "org.mockito:mockito-core:2.0.41-beta"
【讨论】:
以上是关于Spring Boot gradle 插件强制 Mockito 版本的主要内容,如果未能解决你的问题,请参考以下文章
多模块 Spring Boot 项目中的 Gradle 依赖插件
如何使用 spring-boot gradle 插件进行 proguard