当前位置: 首页 > article >正文

Spingboot 之spring-boot-starter-parent与spring-boot-dependencies区分

在创建spring boot工程时,spring-boot-starter-parent 和 spring-boot-dependencies是二选一的关系,在pom中引入其中一个就可以了。

那么什么时候用spring-boot-starter-parent 和 spring-boot-dependencies呢?从字面名称上看,如果我们要通过继承的方式引入springboot框架,那么我们使用spring-boot-starter-parent ,如果想通过依赖的方式引入springboot框架,则我们使用spring-boot-dependencies。

下面给出我们常见的作法:

spring-boot-starter-parent方式

我们需要在 parent 标签里引入spring-boot-starter-parent,然后在dependencies标签里选择需要的具体依赖

<?xml version="1.0" encoding="UTF-8"?>
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>boot-test</artifactId>
    <version>1.0-SNAPSHOT</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.12.RELEASE</version>
    </parent>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

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

我们需要在 dependencyManagement 标签里引入spring-boot-dependencies,然后在dependencies标签里选择需要的具体依赖,如下:

<?xml version="1.0" encoding="UTF-8"?>
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>boot-test</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

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

    <dependencyManagement>
        <dependencies>
            <!-- SpringBoot的依赖配置 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.3.12.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
                <optional>true</optional>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>

以上是我们常规的方法,其实我试了下把 spring-boot-dependencies 作为parent方式即第一种方式,项目也是可以启动成功的

<?xml version="1.0" encoding="UTF-8"?>
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>boot-test</artifactId>
    <version>1.0-SNAPSHOT</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-dependencies</artifactId>
        <version>2.3.12.RELEASE</version>
    </parent>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

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

这种方式不是推荐的方式,因为springboot框架已经很贴心的给我们区分了两个概念;
如果需要通过parent方式的话,就是用spring-boot-starter-parent,如果需要通过依赖的方式引入则使用spring-boot-dependencies

两者关系

我们点开spring-boot-starter-parent的pom内容,如下:

<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>
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-dependencies</artifactId>
    <version>2.3.12.RELEASE</version>
  </parent>
  <artifactId>spring-boot-starter-parent</artifactId>
  <packaging>pom</packaging>
  <name>spring-boot-starter-parent</name>
  <description>Parent pom providing dependency and plugin management for applications built with Maven</description>
  <properties>
    <java.version>1.8</java.version>
    <resource.delimiter>@</resource.delimiter>
    <maven.compiler.source>${java.version}</maven.compiler.source>
    <maven.compiler.target>${java.version}</maven.compiler.target>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  </properties>


...

</project>

很清晰的看到spring-boot-starter-parent是以spring-boot-dependencies为parent的,只是加了一些maven build的插件而已,所以两者内容虽然不能说很相似,但可以说是完全一样。

按照潜规则:想用继承方式我们就用spring-boot-starter-parent,如果想通过依赖方式引入的话就用spring-boot-dependencies

spring-boot-dependencies依赖原理

点开 spring-boot-dependencies,里面大部分是各种starter,即各种独立功能自动装配的依赖;
大家看下这个图就明白了:

在这里插入图片描述
1、spring-boot-dependencies通过dependencyManagement管理各种starter
2、spring-boot-starter-parent通过parent依赖引入spring-boot-dependencies

starter命名规则可以看我另一篇文章:https://blog.csdn.net/Aqu415/article/details/115875840

over~~


http://www.kler.cn/a/159391.html

相关文章:

  • Cursor的详细使用指南
  • 数据恢复常见故障(四)关键信号的耦合电容撞件后导致SATA前端通信异常
  • Python 脚本-扫描当前目录和所有子目录并显示它们的大小。
  • 图的基本概念
  • SDL2:Android APP编译使用 -- SDL2多媒体库使用音频实例
  • 数据结构学习记录-队列
  • 网页产品经理常用的ChatGPT通用提示词模板
  • 配置自动化部署Jenkins和Gitea
  • 信息化,数字化,智能化是3种不同概念吗?与机械化,自动化矛盾吗?
  • 淘宝用户体验VOC标签体系
  • 【前端】-【electron】
  • 2023母婴行业矩阵营销洞察报告
  • ssh-keygen(centos)
  • 【Git】ssh: connect to host github.com port 22: Connection refused
  • 【目标检测】YOLO格式数据集txt标注转换为COCO格式JSON
  • vue.config.js文件重写打包工具配置信息
  • 外贸建站平台工具推荐?做海洋建站的平台?
  • 使用unity开发Pico程序,场景中锯齿问题
  • 【影刀RPA_写入日期到飞书表格】
  • Docker 安装 Redis 挂载配置
  • [Python]字典的应用:赋值表达式转化为字典
  • Kafka中的Topic
  • 【Flink on k8s】- 4 - 在 Kubernetes 上运行容器
  • 【五分钟】学会利用cv2.resize()函数实现图像缩放
  • Ant Design Vue(v1.7.8)a-table组件的插槽功能
  • 【LVS实战】05 keepalived脑裂问题解决方案