【发布时间】:2021-03-13 02:14:37
【问题描述】:
在一个使用 Gradle 构建的简单 Spring Java 项目中,我使用 io.spring.dependency-management 应用 BOM,它应该在全局范围内指定依赖版本。
现在在 BOM 中,我已将 jackson-databind (2.9.5) 的默认版本从 Spring Boot 2.0.2.RELEASE 覆盖到版本 2.9.10.4。
我在 dependencyManagement 部分指定了这个 BOM,并期望 jackson-databind 将在 2.9.10.4 版本中得到解决。然而事实并非如此。如果我在我的子项目中运行 gradle 依赖项,它仍然会定义 Spring Boot 2.0.2.RELEASE 的版本:
runtimeClasspath - Runtime classpath of source set 'main'.
\--- com.fasterxml.jackson.core:jackson-databind -> 2.9.5
我还需要做些什么来启用dependencyManagement吗?
这里是 build.gradle 文件
buildscript {
repositories {
maven {
url "https://plugins.gradle.org/m2/"
}
}
dependencies {
classpath 'io.spring.gradle:dependency-management-plugin:1.0.10.RELEASE'
classpath 'org.springframework.boot:spring-boot-gradle-plugin:2.0.2.RELEASE'
// ...
}
}
allprojects {
repositories {
mavenLocal()
mavenCentral()
}
apply plugin: 'java'
apply plugin: 'io.spring.dependency-management'
dependencyManagement {
imports {
mavenBom "com.itshelf:project-bom:1.0.0"
}
}
}
subprojects {
apply plugin: 'org.springframework.boot'
// ... package Spring fat jar with embedded tomcat into docker image.
}
和BOM定义
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>com.itshelf</groupId>
<artifactId>project-bom</artifactId>
<version>1.0.0</version>
<packaging>pom</packaging>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.0.2.RELEASE</version>
<scope>import</scope>
<type>pom</type>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.10.4</version>
</dependency>
...
</dependencies>
</dependencyManagement>
</project>
【问题讨论】:
标签: spring-boot maven gradle maven-dependency-plugin