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

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

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

一、前言

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

二、Maven繼承

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

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

三、分析spring-boot-starter-parent

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

答:當(dāng)然不是,我們選擇該依賴,然后按住ctrl就可以點進(jìn)去,可以看一下他都做了些什么,實際上就是給我們提供了一個管理的依賴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

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

Maven 可以通過 dependencyManagement 元素對依賴進(jìn)行管理,它具有以下 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一樣都是單繼承機(jī)制,maven當(dāng)中有<type>pom</type>和<scope>import</scope> ,通過這兩個標(biāo)簽在dependencyManagement中聲明依賴,可以替代繼承(達(dá)到類似parent標(biāo)簽的作用,解決了單繼承問題)。

官網(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版本進(jìn)行管理的:

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

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

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

因此便可以明白,解決單繼承的時候為什么官網(wǎng)讓我們導(dǎo)入spring-boot-dependencies,而不是spring-boot-starter-parent,因為spring-boot-starter-parent當(dāng)中繼承了spring-boot-dependencies,但是parent實際上就是提供了一些pluginManagement,而使用import 導(dǎo)入的形式根本無法將這些導(dǎo)入。

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

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

在這里插入圖片描述

假如我們只聲明如下,打出來的jar包是啟動不起來的,打出來的jar包并不會將依賴的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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

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

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

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

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

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

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

    這篇文章主要介紹了java異步導(dǎo)出的實現(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)單地登錄?多地登錄?同端互斥登錄,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • 詳解如何實現(xiàn)SpringBoot的底層注解

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

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

    Kotlin null的處理詳解

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

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

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

    Java零基礎(chǔ)精通方法篇

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

最新評論

农安县| 肇源县| 万载县| 永昌县| 鹰潭市| 孟津县| 绥阳县| 汶川县| 琼结县| 郧西县| 无为县| 怀安县| 贵定县| 镇雄县| 齐河县| 汤阴县| 祁东县| 安丘市| 三都| 措美县| 商丘市| 福清市| 务川| 钦州市| 肇源县| 新邵县| 布尔津县| 连平县| 清水县| 南涧| 绥滨县| 梁平县| 白银市| 阳曲县| 长丰县| 柘城县| 蓝山县| 承德县| 东光县| 满城县| 九江市|