欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

深入探究 spring-boot-starter-parent的作用

 更新時(shí)間:2023年05月19日 10:55:13   作者:怪 咖@  
這篇文章主要介紹了spring-boot-starter-parent的作用詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,感興趣的小伙伴可以跟著小編一起來(lái)學(xué)習(xí)一下

一、前言

在idea當(dāng)中創(chuàng)建springboot項(xiàng)目的時(shí)候都會(huì)繼承一個(gè)spring-boot-starter-parent作為父類(lèi),假如不繼承我們的項(xiàng)目就不能使用了嗎?他的作用是什么呢?報(bào)著這些疑問(wèn)我們進(jìn)行深度解析。

二、Maven繼承

Maven 在設(shè)計(jì)時(shí),借鑒了 Java 面向?qū)ο笾械睦^承思想,提出了 POM 繼承思想。當(dāng)一個(gè)項(xiàng)目包含多個(gè)模塊時(shí),可以在該項(xiàng)目中再創(chuàng)建一個(gè)父模塊,并在其 POM 中聲明依賴(lài),其他模塊的 POM 可通過(guò)繼承父模塊的 POM 來(lái)獲得對(duì)相關(guān)依賴(lài)的聲明。對(duì)于父模塊而言,其目的是為了消除子模塊 POM 中的重復(fù)配置,其中不包含有任何實(shí)際代碼,因此父模塊 POM 的打包類(lèi)型(packaging)必須是 pom。

通過(guò)mvn help:effective-pom 命令就可以查看項(xiàng)目的最終生成的pom(有效的pom)。

三、分析spring-boot-starter-parent

不繼承我們的項(xiàng)目就不能使用了嗎?

答:當(dāng)然不是,我們選擇該依賴(lài),然后按住ctrl就可以點(diǎn)進(jìn)去,可以看一下他都做了些什么,實(shí)際上就是給我們提供了一個(gè)管理的依賴(lài)pom,而并沒(méi)有真實(shí)的去引用任何依賴(lài)!

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

spring-boot-starter-parent下大部門(mén)都是pluginManagement插件管理。

pluginManagement 元素與 dependencyManagement 元素的原理十分相似,在 pluginManagement 元素中可以聲明插件及插件配置,但不會(huì)發(fā)生實(shí)際的插件調(diào)用行為,只有在 POM 中配置了真正的 plugin 元素,且其 groupId 和 artifactId 與 pluginManagement 元素中配置的插件匹配時(shí),pluginManagement 元素的配置才會(huì)影響到實(shí)際的插件行為。

(2)了解spring-boot-dependencies

接下來(lái)我們?cè)冱c(diǎn)進(jìn)去spring-boot-dependencies看看,spring-boot-dependencies給我們提供了大量的dependencyManagement依賴(lài)版本管理。

Maven 可以通過(guò) dependencyManagement 元素對(duì)依賴(lài)進(jìn)行管理,它具有以下 2 大特性:

  • 在該元素下聲明的依賴(lài)不會(huì)實(shí)際引入到模塊中,只有在 dependencies 元素下同樣聲明了該依賴(lài),才會(huì)引入到模塊中。
  • 該元素能夠約束 dependencies 下依賴(lài)的使用,即 dependencies 聲明的依賴(lài)若未指定版本,則使用 dependencyManagement 中指定的版本,否則將覆蓋 dependencyManagement 中的版本。

(3)不引用spring-boot-starter-parent項(xiàng)目如何正常使用

新建一個(gè)空項(xiàng)目,只引入web(注意沒(méi)有引入boot版本管理,那就需要手動(dòng)添加版本號(hào)),springboot照樣可以啟動(dòng)的喲

四、Maven單繼承問(wèn)題

現(xiàn)在有個(gè)問(wèn)題,我現(xiàn)在想使用spring-boot-starter-parent提供的依賴(lài)管理,但是我又不想繼承他,因?yàn)槲疫€要繼承別的項(xiàng)目,這時(shí)候該怎么辦呢?

maven和Java一樣都是單繼承機(jī)制,maven當(dāng)中有<type>pom</type>和<scope>import</scope> ,通過(guò)這兩個(gè)標(biāo)簽在dependencyManagement中聲明依賴(lài),可以替代繼承(達(dá)到類(lèi)似parent標(biāo)簽的作用,解決了單繼承問(wèn)題)。

官網(wǎng)講解:https://docs.spring.io/spring-boot/docs/3.1.0-SNAPSHOT/maven-plugin/reference/htmlsingle/#using.import

<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>

類(lèi)似于

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

只是類(lèi)似,并不完全替代繼承。為什么這么說(shuō)?請(qǐng)看如下示例:spring-boot-starter-parent的pluginManagement是有對(duì)spring-boot-maven-plugin版本進(jìn)行管理的:

找不到說(shuō)明一個(gè)原因,導(dǎo)入的配置沒(méi)有生效!

說(shuō)明使用dependencyManagement來(lái)替代parent的時(shí)候,pluginManagement里面嵌套的plugins版本并沒(méi)有繼承過(guò)來(lái)。

注:import 依賴(lài)范圍只能與 dependencyManagement 元素配合使用才會(huì)有效,其功能是將目標(biāo) pom.xml 中的 dependencyManagement 配置導(dǎo)入合并到當(dāng)前 pom.xml 的 dependencyManagement 中。

因此便可以明白,解決單繼承的時(shí)候?yàn)槭裁垂倬W(wǎng)讓我們導(dǎo)入spring-boot-dependencies,而不是spring-boot-starter-parent,因?yàn)閟pring-boot-starter-parent當(dāng)中繼承了spring-boot-dependencies,但是parent實(shí)際上就是提供了一些pluginManagement,而使用import 導(dǎo)入的形式根本無(wú)法將這些導(dǎo)入。

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

假如不繼承spring-boot-starter-parent,我們還需要自己聲明打包插件。spring-boot-starter-parent配置的插件就是打出來(lái)一個(gè)可直接運(yùn)行的jar。

在這里插入圖片描述

假如我們只聲明如下,打出來(lái)的jar包是啟動(dòng)不起來(lái)的,打出來(lái)的jar包并不會(huì)將依賴(lài)的jar打進(jìn)去。

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

到此這篇關(guān)于深入探究 spring-boot-starter-parent的作用的文章就介紹到這了,更多相關(guān)spring-boot-starter-parent內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java并發(fā)編程之深入理解Synchronized的使用

    java并發(fā)編程之深入理解Synchronized的使用

    文詳細(xì)講述了線(xiàn)程、進(jìn)程的關(guān)系及在操作系統(tǒng)中的表現(xiàn),這是多線(xiàn)程學(xué)習(xí)必須了解的基礎(chǔ)。本文將接著講一下Java線(xiàn)程同步中的一個(gè)重要的概念synchronized,希望能夠給你有所幫助
    2021-06-06
  • 已有的springcloud+mybatis項(xiàng)目升級(jí)為mybatis-plus的方法

    已有的springcloud+mybatis項(xiàng)目升級(jí)為mybatis-plus的方法

    這篇文章主要介紹了已有的springcloud+mybatis項(xiàng)目升級(jí)為mybatis-plus,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • spring+maven實(shí)現(xiàn)發(fā)送郵件功能

    spring+maven實(shí)現(xiàn)發(fā)送郵件功能

    這篇文章主要為大家詳細(xì)介紹了spring+maven實(shí)現(xiàn)發(fā)送郵件功能,利用spring提供的郵件工具來(lái)發(fā)送郵件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • SpringBoot實(shí)現(xiàn)二維碼掃碼登錄的原理及項(xiàng)目實(shí)踐

    SpringBoot實(shí)現(xiàn)二維碼掃碼登錄的原理及項(xiàng)目實(shí)踐

    本文主要介紹了SpringBoot實(shí)現(xiàn)二維碼掃碼登錄的原理及項(xiàng)目實(shí)踐,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • java求100以?xún)?nèi)的素?cái)?shù)示例分享

    java求100以?xún)?nèi)的素?cái)?shù)示例分享

    素?cái)?shù)是指因數(shù)只有1和本身的數(shù)字,這篇文章主要介紹了java求100以?xún)?nèi)的素?cái)?shù)示例,需要的朋友可以參考下
    2014-03-03
  • java生成指定范圍隨機(jī)數(shù)的多種代碼

    java生成指定范圍隨機(jī)數(shù)的多種代碼

    今天在寫(xiě)代碼的時(shí)候需要用到一個(gè)生成指定范圍隨機(jī)數(shù)的函數(shù),百度了一下,發(fā)現(xiàn)了很多種方法,這里簡(jiǎn)單為大家整理一下,方便需要的朋友
    2017-08-08
  • 詳解Java中二分法的基本思路和實(shí)現(xiàn)

    詳解Java中二分法的基本思路和實(shí)現(xiàn)

    二分法是一個(gè)非常高效的算法,它常常用于計(jì)算機(jī)的查找過(guò)程中。本文將通過(guò)示例為大家詳細(xì)講講二分法的基本思路和實(shí)現(xiàn),感興趣的可以了解一下
    2022-08-08
  • Linux系統(tǒng)Docker拉取JDK21鏡像超細(xì)詳解

    Linux系統(tǒng)Docker拉取JDK21鏡像超細(xì)詳解

    這篇文章主要介紹了如何在Linux系統(tǒng)上使用Docker拉取JDK21鏡像,并基于該鏡像搭建開(kāi)發(fā)和測(cè)試環(huán)境,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-12-12
  • Java Comparable 和 Comparator 的詳解及區(qū)別

    Java Comparable 和 Comparator 的詳解及區(qū)別

    這篇文章主要介紹了Java Comparable 和 Comparator 的詳解及區(qū)別的相關(guān)資料,Comparable 自然排序和Comparator 定制排序的實(shí)例,需要的朋友可以參考下
    2016-12-12
  • mybatis使用@mapkey獲取的結(jié)果的鍵(key)為null問(wèn)題

    mybatis使用@mapkey獲取的結(jié)果的鍵(key)為null問(wèn)題

    這篇文章主要介紹了mybatis使用@mapkey獲取的結(jié)果的鍵(key)為null問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06

最新評(píng)論