Spring Boot Starter Parent介绍

news2024/10/10 9:08:02

引言

spring-boot-starter-parent 是一个特殊的项目,为基于 Spring Boot 的应用程序提供默认配置和默认依赖。

在本 Spring Boot 教程中,我们将深入了解所有 Spring Boot 项目内部使用的 spring-boot-starter-parent 依赖项。我们将探讨此依赖项所提供的所有配置选项,以及如何根据需要覆盖这些默认配置。

快速引入

如果你的工程是基于Maven构建的,可以在pom.xml中按以下方式引入:

<parent>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-parent</artifactId>
	<version>3.1.2</version>
	<relativePath/> <!-- lookup parent from repository -->
</parent>

类似的,如果是基于Gradle构建,可以参考按以下方式在build.gradle中引入:

plugins {
	id 'java'
	id 'org.springframework.boot' version '3.1.2'
	id 'io.spring.dependency-management' version '1.1.2'
}

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

什么是Spring Boot Starter Parent项目

Spring Boot 旨在简化构建 Spring 应用程序的过程,同时尽量减少配置工作量。为此,诞生了 spring-boot-starter-parent父项目,为基于 Spring Boot 的应用程序提供默认配置和依赖项管理。

使用 spring-boot-starter-parent 作为父项目,可以确保应用程序遵循 Spring Boot 推荐的最佳实践,并且能够轻松地利用 Spring Boot 提供的各种特性。

<project xmlns="http://maven.apache.org/POM/4.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">

  <modelVersion>4.0.0</modelVersion>
  <groupId>com.howtodoinjava</groupId>
  <artifactId>spring-webmvc</artifactId>
  <packaging>jar</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>spring-webmvc Maven Webapp</name>
  <url>https://howtodoinjava.com</url>

  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>3.1.2</version>
    <relativePath/> <!-- lookup parent from repository -->
  </parent>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <java.version>17</java.version>
  </properties>

    <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
    </dependency>
    ...
    ...
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
    </plugins>
  </build>

</project>

当我们创建一个 Spring Boot 项目时,我们使用 spring-boot-starter-parent 作为我们项目的 pom.xml 或 build.gradle 的父级。添加它之后,我们的项目会从这个父项目中继承默认的构建、依赖项和配置,因此我们不必手动指定它们。
在这里插入图片描述
通过使用 spring-boot-starter-parent,我们可以快速启动 Spring Boot 应用程序开发并减少设置常见配置和依赖项所需的工作量。

Spring Boot Dependencies 项目介绍

“Spring Boot Starter Parent”项目进一步扩展了 spring-boot-dependencies 项目,spring-boot-dependencies 项目的作用包括:

  • 统一依赖版本管理:为 Spring Boot 应用程序中常用的依赖项提供统一的版本管理,确保所有依赖项的版本都是兼容且经过测试的。
  • 减少版本冲突:通过集中管理所有依赖项的版本,避免了因版本不一致导致的问题。
  • 简化依赖声明:在项目中引用依赖项时,无需指定版本号,因为这些信息已经由 spring-boot-dependencies 统一管理。
<properties>
	<activemq.version>5.18.2</activemq.version>
	<angus-mail.version>1.1.0</angus-mail.version>
	<artemis.version>2.28.0</artemis.version>
	<aspectj.version>1.9.19</aspectj.version>
	<assertj.version>3.24.2</assertj.version>
	<awaitility.version>4.2.0</awaitility.version>
	...
	...
</properties>

我们可以参考 spring-boot-dependencies项目的最新版本,并检查其 pom.xml 以获取所有依赖项使用的最新版本。

项目依赖管理

引入默认版本的依赖

一旦我们在项目中声明了 spring-boot-starter-parent,我们就可以引入其中的任何依赖项,只需在 dependencies 标签中声明它们即可。这些依赖项已经在 spring-boot-starter-parent 中指定了默认版本,因此无需在项目中再次指定版本号。

<dependencies>
    <!-- 引入 Spring Web Starter -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    
    <!-- 其他依赖项 -->
</dependencies>

由于 spring-boot-starter-parent 已经管理了所有依赖项的版本,因此上述代码片段中不需要指定版本号。这样可以简化依赖管理,并确保所有依赖项版本的一致性。

这种方式不仅简化了依赖项的管理,还确保了项目使用的是经过测试和验证的依赖项组合。

引入不同版本的依赖

要包含具有不同版本的依赖项,我们可以在 dependencyManagement 部分中指定依赖项及其版本。这样做可以覆盖 spring-boot-starter-parent 中默认提供的版本,同时仍然享受统一版本管理带来的便利。

<dependencyManagement>
    <dependencies>
            <!-- 覆盖特定依赖项的版本 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
                <version>2.7.4</version> <!-- 特定版本 -->
            </dependency>
    </dependencies>
</dependencyManagement>

在这个例子中,spring-boot-starter-web 的版本在 dependencyManagement 部分中被指定为 2.7.4。这样,在实际使用的依赖项中引用 spring-boot-starter-web 时,就可以使用这个指定的版本,而不是 spring-boot-starter-parent 中默认的版本。

通过这种方式,你可以灵活地覆盖或指定特定依赖项的版本,同时仍然保持项目依赖项的整体一致性。

或者,我们可以在属性部分覆盖所包含库的版本号。

<properties>
	<junit.version>4.13.2</junit.version>
	<junit-jupiter.version>5.9.3</junit-jupiter.version>
</properties>

总结

本 Spring Boot 教程讨论了特殊项目 spring-boot-starter-parent 和 spring-boot-dependencies,它们之间的继承关系,以及它们在我们创建的任何 Spring Boot 项目中所带来的好处。我们还学习了如何包含默认依赖项以及如何覆盖这些依赖项的版本。

通过使用 spring-boot-starter-parent 和 spring-boot-dependencies,我们可以:

  • 简化依赖管理:避免在项目中显式指定每个依赖项的版本号,从而减少版本冲突的风险。
  • 统一版本控制:确保所有依赖项的版本都是统一管理的,这有助于维护项目的稳定性和兼容性。
  • 提高开发效率:通过预配置的默认设置和插件配置,可以更快地搭建项目基础结构。
  • 灵活覆盖版本:在需要时,可以在 dependencyManagement 部分中覆盖特定依赖项的版本,以适应特定项目需求。

总之,这些工具和最佳实践帮助开发者更容易地构建健壮且易于维护的 Spring Boot 应用程序。希望本教程对您的学习之旅有所帮助!

祝您学习愉快!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2201605.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于jmeter+perfmon的稳定性测试记录

1. 引子 最近承接了项目中一些性能测试的任务&#xff0c;因此决定记录一下&#xff0c;将测试的过程和一些心得收录下来。 说起来性能测试算是软件测试行业内&#xff0c;有些特殊的部分。这部分的测试活动&#xff0c;与传统的测试任务差别是比较大的&#xff0c;也比较依赖…

用Python实现运筹学——Day 12: 线性规划在物流优化中的应用

一、学习内容 线性规划在物流优化中可以用于解决诸如配送路径优化、货物运输调度等问题。配送中心的路径优化问题本质上是寻找一条最优路径&#xff0c;在满足需求点的需求条件下&#xff0c;最小化配送的总运输成本或时间。常见的物流优化问题包括&#xff1a; 配送中心的货…

集师知识付费小程序:打造培训机构在线教育的金字招牌 集师知识付费系统 集师知识付费小程序 集师知识服务系统 集师线上培训系统 集师线上卖课小程序

在数字化浪潮的推动下&#xff0c;在线教育已成为教育领域的热门话题。而在众多在线教育平台中&#xff0c;集师知识付费小程序凭借其独特的定位和创新的模式&#xff0c;成功为培训机构打造了一张闪亮的在线教育金字招牌。 集师知识付费小程序&#xff0c;是一个集课程展示、…

Python 如何使用 Matplotlib 和 Seaborn 可视化数据

Python 如何使用 Matplotlib 和 Seaborn 可视化数据 一、简介 数据可视化是数据分析过程中非常重要的步骤。通过可视化&#xff0c;复杂的数据变得更直观&#xff0c;数据中的模式、趋势和异常可以更容易被识别。Python 提供了多个强大的库来进行数据可视化&#xff0c;其中最…

ChatGPT:引领人工智能新潮流!

一、ChatGPT 是什么&#xff1f; 1. ChatGPT 的强大功能和广泛应用。 ChatGPT 作为一款先进的 AI 语言模型&#xff0c;拥有众多强大功能。它可以进行文本生成、文本分类、情感分析、机器翻译等多种自然语言处理任务。同时&#xff0c;ChatGPT 还能进行对话式交互&#xff0c;…

python之详解集合

一种无序且不重复的数据容器&#xff0c;集合用大括号{}表示。 1、集合的查找访问 集合是不能通过 集合名[index] 这种方式访问的&#xff0c;其作用在于快速读取&#xff0c;而不是针对某个元素。 但&#xff0c;可将集合转为列表&#xff0c;再由列表访问元素。不过&#…

Laravel Filament 如何配置多语言支持

演示 一、安装拓展包outerweb/filament-translatable-fields composer require outerweb/filament-translatable-fields配置模型 该套件包含一个名为 HasTranslations 的特性&#xff0c;用于使 Eloquent 模型具备多语言功能。翻译值以 JSON 格式存储&#xff0c;并不需要额外…

叙说 OSI 七层网络模型 | 你在第几层

引言 开放系统互联&#xff08;OSI&#xff0c;Open Systems Interconnection&#xff09;模型&#xff0c;这一国际标准化组织&#xff08;ISO&#xff09;提出的理论框架&#xff0c;是计算机网络通信领域内不可或缺的基础工具。如同语法和句法对于构建和解析语言的重要性一…

Python对PDF文件页面的旋转和切割

Python对PDF文件页面的旋转和切割 利用Python的.rotate()方法和.mediabox属性对PDF页面进行旋转和切割&#xff0c;最终生成一个PDF。下面结合案例进行说明&#xff0c;本示例中的名为split_and_rotate.pdf文件在practice_files文件夹中&#xff0c; 示例&#xff08;1&#…

ShardingSphere分库分表产品介绍

目录 一、ShardingSphere分库分表产品介绍 二、客户端分库分表与服务端分库分表 1、ShardingJDBC客户端分库分表 2、ShardingProxy服务端分库分表 3、ShardingSphere混合部署架构 三、分库分表&#xff0c;能不分就不分&#xff01; 1、为什么要分库分表&#xff1f; 2、…

基于SpringBoot点餐系统【附源码】

基于SpringBoot点餐系统 效果如下&#xff1a; 系统首页界面 用户注册界面 美食信息页面 促销活动页面 管理员登录主页面 系统管理界面 订单管理界面 研究背景 随着互联网的迅猛发展和人们生活节奏的加快&#xff0c;传统的点餐方式已经无法满足现代消费者对快速、便捷服务的…

解决银河麒麟操作系统中无法通过管理员安装软件或运行有执行权限脚本的问题

解决银河麒麟操作系统中无法通过管理员安装软件或运行有执行权限脚本的问题 1、问题描述2、问题分析3、问题解决方法 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; 1、问题描述 在银河麒麟操作系统中&#xff0c;通过终端执行命令时&…

103页PPT | 智慧城市综合解决方案

智慧城市概况 PPT开篇介绍了智慧城市的发展历程&#xff0c;从2014年国家提出《国家新型城镇化规划(2014&#xff0d;2020年)》开始&#xff0c;到2017年提出从“智慧城市”到“新型智慧城市”的转变&#xff0c;再到2020年新型智慧城市建设取得显著成效。这一过程中&#xff…

3.1 显示层技术演变

文章目录 静态网站公共网关接口CGIServletJSPJSP模板引擎第三方模板引擎前后端分离Thymeleaf 今天我将与大家分享显示层技术的演变历程&#xff0c;以及它们在现代Web开发中的应用。 静态网站 首先&#xff0c;我们从静态网站开始。静态网站主要由HTML、CSS和JavaScript等静态…

JimuReport报表部署 | 升级 | 仪表盘集成 | 迁移其他项目 (图文讲解)

目录 前言1. 项目部署2. 项目升级3. 仪表盘集成3.1 配置类事项3.2 版本升级事项4. 迁移到ruoyi-vue-pro4.1 权限4.2 前端5. 彩蛋前言 以下针对Vue以及Java的项目 对于文中所说的nginx以及Java的相关知识推荐阅读: java框架 零基础从入门到精通的学习路线 附开源项目面经等(…

冷热数据分离

优质博文&#xff1a;IT-BLOG-CN 一、背景 随着机票业务的快速发展&#xff0c;订单量持续增长对业务性能带来影响&#xff0c;需要进行冷热数据分离。目前机票订单模块主要使用Mysql(InnoDB)作为数据库存储&#xff0c;历史订单信息状态修改频率低并占用大量数据库存储空间&…

第69期 | GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区&#xff0c;集成了生成预训练Transformer&#xff08;GPT&#xff09;、人工智能生成内容&#xff08;AIGC&#xff09;以及大语言模型&#xff08;LLM&#xff09;等安全领域应用的知识。在这里&#xff0c;您可以找…

LeetCode 1928.规定时间内到达终点的最小花费:动态规划

【LetMeFly】1928.规定时间内到达终点的最小花费&#xff1a;动态规划 力扣题目链接&#xff1a;https://leetcode.cn/problems/minimum-cost-to-reach-destination-in-time/ 一个国家有 n 个城市&#xff0c;城市编号为 0 到 n - 1 &#xff0c;题目保证 所有城市 都由双向道…

Apache DolphinScheduler社区9月进展记录

各位热爱 Apache DolphinScheduler 的小伙伴们&#xff0c;社区 9 月月报更新啦&#xff01;这里将记录 Apache DolphinScheduler 社区每月的重要更新&#xff0c;欢迎关注&#xff01; 月度 Merge Star 感谢以下小伙伴上个月为 Apache DolphinScheduler 做的精彩贡献&#x…

数据结构前置知识(上)

1. 初识集合框架 1.1 什么是集合框架 在了解集合框架之前,我们先来认识一下数据结构,所谓数据结构就是描述和组织数据的一个东西. 那什么是集合框架呢?在java里面集合框架(Java Collection Framework),又被称为容器container,说白了就是很多个接口,抽象类,实现类组成的一个包,…