深入理解 spring-boot-starter-parent

这篇具有很好参考价值的文章主要介绍了深入理解 spring-boot-starter-parent。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、前言

在idea当中创建springboot项目的时候都会继承一个spring-boot-starter-parent作为父类,假如不继承我们的项目就不能使用了吗?他的作用是什么呢?报着这些疑问我们进行深度解析。

深入理解 spring-boot-starter-parent

二、Maven继承

Maven 在设计时,借鉴了 Java 面向对象中的继承思想,提出了 POM 继承思想。当一个项目包含多个模块时,可以在该项目中再创建一个父模块,并在其 POM 中声明依赖,其他模块的 POM 可通过继承父模块的 POM 来获得对相关依赖的声明。对于父模块而言,其目的是为了消除子模块 POM 中的重复配置,其中不包含有任何实际代码,因此父模块 POM 的打包类型(packaging)必须是 pom

通过mvn help:effective-pom 命令就可以查看项目的最终生成的pom(有效的pom)。mvn help:effective-pom命令详解:https://blog.csdn.net/weixin_43888891/article/details/130483451

三、分析spring-boot-starter-parent

不继承我们的项目就不能使用了吗?

答:当然不是,我们选择该依赖,然后按住ctrl就可以点进去,可以看一下他都做了些什么,实际上就是给我们提供了一个管理的依赖pom,而并没有真实的去引用任何依赖!

(1)了解spring-boot-starter-parent

深入理解 spring-boot-starter-parent

spring-boot-starter-parent下大部门都是pluginManagement插件管理。

pluginManagement 元素与 dependencyManagement 元素的原理十分相似,在 pluginManagement 元素中可以声明插件及插件配置,但不会发生实际的插件调用行为,只有在 POM 中配置了真正的 plugin 元素,且其 groupId 和 artifactId 与 pluginManagement 元素中配置的插件匹配时,pluginManagement 元素的配置才会影响到实际的插件行为。

深入理解 spring-boot-starter-parent

(2)了解spring-boot-dependencies

接下来我们再点进去spring-boot-dependencies看看,spring-boot-dependencies给我们提供了大量的dependencyManagement依赖版本管理。

Maven 可以通过 dependencyManagement 元素对依赖进行管理,它具有以下 2 大特性:

  • 在该元素下声明的依赖不会实际引入到模块中,只有在 dependencies 元素下同样声明了该依赖,才会引入到模块中。
  • 该元素能够约束 dependencies 下依赖的使用,即 dependencies 声明的依赖若未指定版本,则使用 dependencyManagement 中指定的版本,否则将覆盖 dependencyManagement 中的版本。
深入理解 spring-boot-starter-parent

(3)不引用spring-boot-starter-parent项目如何正常使用

新建一个空项目,只引入web(注意没有引入boot版本管理,那就需要手动添加版本号),springboot照样可以启动的哟

深入理解 spring-boot-starter-parent

四、Maven单继承问题

现在有个问题,我现在想使用spring-boot-starter-parent提供的依赖管理,但是我又不想继承他,因为我还要继承别的项目,这时候该怎么办呢?

maven和Java一样都是单继承机制,maven当中有<type>pom</type>和<scope>import</scope> ,通过这两个标签在dependencyManagement中声明依赖,可以替代继承(达到类似parent标签的作用,解决了单继承问题)。

官网讲解:https://docs.spring.io/spring-boot/docs/3.1.0-SNAPSHOT/maven-plugin/reference/htmlsingle/#using.import

深入理解 spring-boot-starter-parent
<dependencyManagement>
	 <dependencies>
		<dependency>
			 <groupId>org.springframework.boot</groupId>
			 <artifactId>spring-boot-dependencies</artifactId>
			 <version>2.7.10</version>
			 <type>pom</type>
			 <scope>import</scope>
		 </dependency>
	</dependencies>
</dependencyManagement>

类似于

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.7.10</version>
    <relativePath/>
</parent>

只是类似,并不完全替代继承。为什么这么说?请看如下示例:spring-boot-starter-parent的pluginManagement是有对spring-boot-maven-plugin版本进行管理的:

深入理解 spring-boot-starter-parent

找不到说明一个原因,导入的配置没有生效!

深入理解 spring-boot-starter-parent深入理解 spring-boot-starter-parent

说明使用dependencyManagement来替代parent的时候,pluginManagement里面嵌套的plugins版本并没有继承过来。

注:import 依赖范围只能与 dependencyManagement 元素配合使用才会有效,其功能是将目标 pom.xml 中的 dependencyManagement 配置导入合并到当前 pom.xml 的 dependencyManagement 中。

因此便可以明白,解决单继承的时候为什么官网让我们导入spring-boot-dependencies,而不是spring-boot-starter-parent,因为spring-boot-starter-parent当中继承了spring-boot-dependencies,但是parent实际上就是提供了一些pluginManagement,而使用import 导入的形式根本无法将这些导入。

五、不继承spring-boot-starter-parent需要注意的

假如不继承spring-boot-starter-parent,我们还需要自己声明打包插件。spring-boot-starter-parent配置的插件就是打出来一个可直接运行的jar。

深入理解 spring-boot-starter-parent

假如我们只声明如下,打出来的jar包是启动不起来的,打出来的jar包并不会将依赖的jar打进去。文章来源地址https://www.toymoban.com/news/detail-435244.html

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

到了这里,关于深入理解 spring-boot-starter-parent的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Could not find artifact org.springframework.boot:spring-boot-starter-parent:jar

    在创建Springboot工程时,引入了org.springframework.boot的spring-boot-starter-parent和spring-boot-starter-web,但是提示找不到spring-boot-starter-parent 的jar包,而spring-boot-starter-web的jar包可以找到,配置的是阿里云的maven仓库。 报错内容: Could not find artifact org.springframework.boot:spring-boot-starter-pare

    2024年02月12日
    浏览(46)
  • 报错 Project ‘org.springframework.boot:spring-boot-starter-parent’ not found 的解决办法

    先上图:  引入spring-boot-starter-parent 依赖的时候总是会有报错。 网上大多数办法都说是maven的问题,但是maven的配置明明没有问题但还是会报错。 那么有可能是缓存的原因,可以清理一下idea的缓存。 如下:  点击图中高亮的选项  选择图中的Inavalidate and Restart  问题解决。

    2024年02月13日
    浏览(117)
  • 报错: Could not transfer artifact org.springframework.boot:spring-boot-starter-parent:pom

    在maven项目中若要导入SpringBoot, 或是创建SpringBoot项目时,父级依赖的spring-boot-starter-parent通常都会出现 Project ‘org.springframework.boot:spring-boot-starter-parent:x.x.x’ not found 或 Could not transfer artifact org.springframework.boot:spring-boot-starter-parent:pom 的错误提示。 问题出现场景 我新建了一个

    2024年02月07日
    浏览(50)
  • idea创建spring项目后报错‘org.springframework.boot:spring-boot-starter-parent:2.7.3‘ not found

    创建新项目后spring-boot-starter-parent找不到,原因在于新建项目选择了spring-boot-starter-parent新版本,而缓存中还是使用的老版本导致。 idea默认缓存maven本地库中的依赖库,在新建项目时会直接到缓存中寻找依赖库。如果相同库只是修改版本会导致idea无法从缓存中依赖到相应的库

    2024年02月07日
    浏览(63)
  • Failure to find org.springframework.boot:spring-boot-starter-parent:pom:3.0.1-SNAPSHOT

    使用spring initializr创建maven程序, 在intellij idea中打开时报错: Failure to find org.springframework.boot:spring-boot-starter-parent:pom:3.0.1-SNAPSHOT in http://maven.aliyun.com/nexus/content/groups/public/ was cached in the local repository, resolution will not be reattempted until the update interval of nexus-aliyun has elapsed or updates are

    2024年02月16日
    浏览(71)
  • 已解决Could not find artifact org.springframework.boot:spring-boot-starter-parent:pom:2.2.4.RELEASE

    已解决Could not find artifact org.springframework.boot:spring-boot-starter-parent:pom:2.2.4.RELEASE Could not find artifact org.springframework.boot:spring-boot-starter-parent:pom:2.2.4.RELEASE 出现找不到Spring Boot依赖的错误可能有多种原因 下滑查看解决方法 以下是一些常见的解决方法: 清理本地Maven仓库:有时候

    2024年02月05日
    浏览(37)
  • springboot web创建失败,解决Could not find artifact org.springframework.boot:spring-boot-starter-parent:pom

    jdk8不支持3.0以上的springboot版本,如果你在创建项目的时候用的是jdk8,那么我建议你在创建好项目之后自行再pom文件里降级,我刚开始接触springboot时,用的是jdk11,导入的springboot版本是2.7.1,然后弄了差不多半天都找不到原因,然后我就扩大了阿里云的搜索地址,自行在pom文

    2024年02月04日
    浏览(46)
  • 解决Could not find artifact org.springframework.boot:spring-boot-starter-parent:pom:2.6.2 in alimaven

    在部署SpringBoot项目时遇到pom所有版本号爆红,而报错只有标题中的那句话,尝试了多种方法即便不再报错但仍爆红。在查阅和尝试了多种方法后,我决定删除之前的maven镜像配置尝试一下。 方法: 复制一下配置代码,至maven文件下的conf,找到settings.xml,选择文本方式打开文

    2024年04月17日
    浏览(43)
  • 深入理解Spring Boot Starter:概念、特点、场景、原理及自定义starter

    在Spring框架的发展过程中,为了简化项目的搭建和配置过程,Spring Boot应运而生。Spring Boot通过提供一系列开箱即用的Starter,使得开发者能够快速整合Spring生态系统中的各种技术栈,提升开发效率。本文将深入探讨Spring Boot Starter的基本概念、主要特点、应用场景以及实现原理

    2024年02月22日
    浏览(46)
  • Spring Boot Starter Parent

    在这,您将学习了解 Spring Boot Starter Parent, 它是 Spring Boot 提供的父级 Pom 文件,旨在提供自动版本依赖管理,帮助我们轻松快速地进行 Spring Boot 开发。 通过 Spring Boot Starter Parent, 我们可以进行简单便捷地包依赖管理。在 Spring Boot 每一个发行版中, 均提供了该版本所兼容的依

    2024年02月08日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包