一、简介
Spring Boot 是快速启动新项目的优秀框架。它帮助开发人员快速创建新应用程序的方法之一是定义一组适合大多数用户的依赖项。
但是,在某些情况下,
在本教程中,我们将了解如何覆盖Spring Boot 托管依赖项及其版本。
2. Spring Boot 物料清单(BOM)
我们先来看看Spring Boot 是如何管理依赖的。简而言之,Spring Boot 使用物料清单(BOM) 来定义依赖项和版本。
大多数Spring Boot 项目继承自 后一个工件是Spring Boot BOMdependencyManagement
<dependencyManagement> <dependencies> <dependency> ... </dependency> <dependency> ... </dependency> </dependencies> </dependencyManagement>
通过使用Maven 的 让我们看一个例子。dependencyManagement
Spring Boot BOM 中的条目之一如下:
<dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-amqp</artifactId> <version>${activemq.version}</version> </dependency>
这意味着项目中依赖ActiveMQ 的任何工件都将默认获得此版本。
另外,请注意 这是Spring Boot BOM 中的常见做法,它在自己的properties
3. 覆盖Spring Boot 管理的依赖版本
现在我们了解了Spring Boot 如何管理依赖版本,让我们看看我们可以覆盖它们。
3.1.马文
对于Maven,我们有两个选项可以覆盖Spring Boot 管理的依赖项。首先,对于Spring Boot BOM 使用属性占位符指定版本的任何依赖项,
<properties> <activemq.version>5.16.3</activemq.version> </properties>
这将导致任何使用activemq.version
此外,如果版本dependency
version
<dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-amqp</artifactId> <version>5.16.3</version> </dependency>
3.2.摇篮
Gradle 需要一个插件来支持来自Spring Boot BOM 的依赖管理 因此,要开始,我们必须包含插件并导入BOM:
apply plugin: "io.spring.dependency-management" dependencyManagement { imports { mavenBom 'io.spring.platform:platform-bom:2.5.5' } }
现在,如果我们想覆盖特定版本的依赖项,我们只需要将BOM 中的相应属性指定为Gradleext
ext['activemq.version'] = '5.16.3'
并且如果BOM中没有要覆盖的属性,我们总是可以在声明依赖时直接指定版本:
compile 'org.apache.activemq:activemq-amqp:5.16.3'
3.3.注意事项
这里有几个警告值得一提。
首先,重要的是要记住Spring Boot 是使用其BOM 中指定的库版本构建和测试的。每当我们指定不同的库版本时,就有可能引入不兼容的风险。因此,每当我们偏离标准依赖版本时,都必须测试我们的应用程序。
另外,请记住,对于Maven,这意味着使用Spring Boot 父级。对于Gradle,这意味着使用Spring 依赖项插件。
4. 查找依赖版本
我们已经看到Spring Boot 如何管理依赖版本以及我们如何覆盖它们。在本节中,我们将了解如何找到项目正在使用的库的版本。这对于识别库版本和确认我们应用于项目的任何覆盖都得到遵守非常有用。
4.1.马文
Maven 提供了一个目标,我们可以使用它来显示所有依赖项及其版本的列表。例如,如果我们运行以下命令:
mvn dependency:tree
我们应该看到类似于以下内容的输出:
[INFO] com.baeldung:dependency-demo:jar:0.0.1-SNAPSHOT [INFO] +- org.springframework.boot:spring-boot-starter-web:jar:2.5.7-SNAPSHOT:compile [INFO] | +- org.springframework.boot:spring-boot-starter:jar:2.5.7-SNAPSHOT:compile [INFO] | | +- org.springframework.boot:spring-boot:jar:2.5.7-SNAPSHOT:compile [INFO] | | +- org.springframework.boot:spring-boot-autoconfigure:jar:2.5.7-SNAPSHOT:compile [INFO] | | +- org.springframework.boot:spring-boot-starter-logging:jar:2.5.7-SNAPSHOT:compile [INFO] | | | +- ch.qos.logback:logback-classic:jar:1.2.6:compile [INFO] | | | | \- ch.qos.logback:logback-core:jar:1.2.6:compile
输出显示作为项目依赖项的所有工件和版本。这些依赖关系以树状结构呈现,
在上面的例子中,因此,我们可以向上导航回到我们的顶级项目。logback-classic
spring-boot-starter-logging
spring-boot-starter
4.2.摇篮
Gradle 提供了一个生成类似依赖树的任务。例如,如果我们运行以下命令:
gradle dependencies
我们将得到类似于以下内容的输出:
compileClasspath - Compile classpath for source set 'main'. \--- org.springframework.boot:spring-boot-starter-web -> 1.3.8.RELEASE +--- org.springframework.boot:spring-boot-starter:1.3.8.RELEASE | +--- org.springframework.boot:spring-boot:1.3.8.RELEASE | | +--- org.springframework:spring-core:4.2.8.RELEASE | | \--- org.springframework:spring-context:4.2.8.RELEASE | | +--- org.springframework:spring-aop:4.2.8.RELEASE
就像Maven 输出一样,我们可以轻松识别为什么每个工件都被拉入项目,以及使用的版本。
5. 结论
在文章中,我们学习了Spring Boot 如何管理依赖版本。我们还看到了如何在Maven 和Gradle 中覆盖这些依赖版本。最后,我们看到了如何验证两种项目类型中的依赖项版本。
0 评论