最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

一、前言

在idea當中創(chuàng)建springboot項目的時候都會繼承一個spring-boot-starter-parent作為父類,假如不繼承我們的項目就不能使用了嗎?他的作用是什么呢?報著這些疑問我們進行深度解析。

二、Maven繼承

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

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

三、分析spring-boot-starter-parent

不繼承我們的項目就不能使用了嗎?

答:當然不是,我們選擇該依賴,然后按住ctrl就可以點進去,可以看一下他都做了些什么,實際上就是給我們提供了一個管理的依賴pom,而并沒有真實的去引用任何依賴!

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

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

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

(2)了解spring-boot-dependencies

接下來我們再點進去spring-boot-dependencies看看,spring-boot-dependencies給我們提供了大量的dependencyManagement依賴版本管理。

Maven 可以通過 dependencyManagement 元素對依賴進行管理,它具有以下 2 大特性:

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

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

新建一個空項目,只引入web(注意沒有引入boot版本管理,那就需要手動添加版本號),springboot照樣可以啟動的喲

四、Maven單繼承問題

現(xiàn)在有個問題,我現(xiàn)在想使用spring-boot-starter-parent提供的依賴管理,但是我又不想繼承他,因為我還要繼承別的項目,這時候該怎么辦呢?

maven和Java一樣都是單繼承機制,maven當中有<type>pom</type>和<scope>import</scope> ,通過這兩個標簽在dependencyManagement中聲明依賴,可以替代繼承(達到類似parent標簽的作用,解決了單繼承問題)。

官網(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>

類似于

<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版本進行管理的:

找不到說明一個原因,導入的配置沒有生效!

說明使用dependencyManagement來替代parent的時候,pluginManagement里面嵌套的plugins版本并沒有繼承過來。

注:import 依賴范圍只能與 dependencyManagement 元素配合使用才會有效,其功能是將目標 pom.xml 中的 dependencyManagement 配置導入合并到當前 pom.xml 的 dependencyManagement 中。

因此便可以明白,解決單繼承的時候為什么官網(wǎng)讓我們導入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。

在這里插入圖片描述

假如我們只聲明如下,打出來的jar包是啟動不起來的,打出來的jar包并不會將依賴的jar打進去。

<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的作用的文章就介紹到這了,更多相關spring-boot-starter-parent內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • mybatis-plus如何禁用一級緩存的方法

    mybatis-plus如何禁用一級緩存的方法

    這篇文章主要介紹了mybatis-plus如何禁用一級緩存的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • 一篇文章帶你玩轉(zhuǎn)Spring bean的終極利器

    一篇文章帶你玩轉(zhuǎn)Spring bean的終極利器

    這篇文章主要給大家介紹了關于玩轉(zhuǎn)Spring bean的終極利器的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用spring bean具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-05-05
  • java異步導出的實現(xiàn)過程

    java異步導出的實現(xiàn)過程

    這篇文章主要介紹了java異步導出的實現(xiàn)過程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-10-10
  • springboot環(huán)境下配置使用sqlite數(shù)據(jù)庫方式

    springboot環(huán)境下配置使用sqlite數(shù)據(jù)庫方式

    這篇文章主要介紹了springboot環(huán)境下配置使用sqlite數(shù)據(jù)庫方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • SpringBoot項目讀取外置logback配置文件的問題及解決

    SpringBoot項目讀取外置logback配置文件的問題及解決

    SpringBoot項目讀取外置logback配置文件的問題及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • Sa-Token不同模式實現(xiàn)單地登錄?多地登錄?同端互斥登錄

    Sa-Token不同模式實現(xiàn)單地登錄?多地登錄?同端互斥登錄

    這篇文章主要為大家介紹了Sa-Token不同模式實現(xiàn)單地登錄?多地登錄?同端互斥登錄,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • 詳解如何實現(xiàn)SpringBoot的底層注解

    詳解如何實現(xiàn)SpringBoot的底層注解

    今天給大家?guī)淼奈恼率侨绾螌崿F(xiàn)SpringBoot的底層注解,文中有非常詳細的介紹及代碼示例,對正在學習java的小伙伴很有幫助,需要的朋友可以參考下
    2021-06-06
  • Kotlin null的處理詳解

    Kotlin null的處理詳解

    這篇文章主要介紹了Kotlin null的處理詳解的相關資料,需要的朋友可以參考下
    2017-06-06
  • 利用Java將2019拆分成三個素數(shù)平方和的方法實例

    利用Java將2019拆分成三個素數(shù)平方和的方法實例

    這篇文章主要給大家介紹了關于利用Java將2019拆分成三個素數(shù)平方和的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Java具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2020-05-05
  • Java零基礎精通方法篇

    Java零基礎精通方法篇

    方法,也稱函數(shù),如果想要重復一段或者多段代碼塊的使用,可以將這些代碼封裝成一個方法,方法具體表現(xiàn)為某種行為,使用方法可以提高代碼的復用性
    2022-05-05

最新評論

德钦县| 宿迁市| 城市| 边坝县| 连云港市| 中超| 西峡县| 聂荣县| 舞阳县| 屏东市| 大同市| 舒兰市| 饶河县| 隆回县| 泸溪县| 长岛县| 昌图县| 化德县| 棋牌| 沾化县| 阿拉尔市| 嵩明县| 宜昌市| 翼城县| 南康市| 耿马| 卢氏县| 温州市| 隆昌县| 凤城市| 清涧县| 余庆县| 隆尧县| 洱源县| 吉林省| 南岸区| 大港区| 龙川县| 洱源县| 襄城县| 五大连池市|