maven父工程relativepath標(biāo)簽使用解讀
1、概述
我們?cè)谑褂胢aven構(gòu)建父子工程時(shí),通常會(huì)在父工程中將pom的打包方式設(shè)置為pom,然后在pom文件中使用modules標(biāo)簽來聲明子工程,我們?cè)谧庸こ痰膒om文件中使用parent標(biāo)簽來聲明自己屬于哪個(gè)父工程。
這樣的好處是可以方便打包和管理依賴。
2、問題
如果我們的子工程是一個(gè)springBoot項(xiàng)目,那么我們可以在pom文件中使用parent標(biāo)簽去繼承spring-boot的praent工程,這樣的好處是我們項(xiàng)目中使用有關(guān)spring-boot的依賴可以全由父工程來管理,方便版本統(tǒng)一。
但現(xiàn)在我們的praent標(biāo)簽已經(jīng)指向了我們自己創(chuàng)建的父工程。
在pom中只允許使用一個(gè)praent標(biāo)簽,那還有什么辦法呢?
3、答案(方式一)
這是一個(gè)父工程的pom文件,該工程下管理了一個(gè)model1子工程
<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>mavenParent</artifactId> <version>1.0-SNAPSHOT</version> <packaging>pom</packaging> <modules> <module>model1</module> </modules> </project>
子工程pom文件:我們可以看到我們的父工程是聲明的spring-boot-starter-parent,而不是我們自己的父工程,其實(shí)這樣也可以被我們自己的父工程所管理,因?yàn)槲覀冊(cè)诟腹こ讨惺褂昧薽odules標(biāo)簽。
這里有一個(gè)關(guān)鍵點(diǎn):我將relativePath標(biāo)簽關(guān)閉了,也就是置空.(該標(biāo)簽必須置空,不寫會(huì)使用默認(rèn)值也會(huì)報(bào)錯(cuò))。
如果你是使用idea創(chuàng)建的maven工程,手動(dòng)勾選了springboot,那么在relativePath標(biāo)簽旁邊會(huì)注釋一段話:在本地倉(cāng)庫(kù)查找依賴
<?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> <artifactId>model1</artifactId> <packaging>jar</packaging> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.7.2</version> <relativePath /><!-- lookup parent from repository --> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <!-- 這里不需要指定版本號(hào),版本由上面的父工程管理了 --> </dependency> </dependencies> </project>
4、詳解
relativePath標(biāo)簽含義:指定父工程的pom文件路徑
如果你不使用這個(gè)標(biāo)簽,那他的默認(rèn)值是<relativePath>../pom<relativePath>。也就是指向當(dāng)前模塊的上一級(jí)目錄中的pom文件,也就是我們自己聲明的父工程。
他的查找順序?yàn)椋簉elativePath元素中的地址–本地倉(cāng)庫(kù)–遠(yuǎn)程倉(cāng)庫(kù)。如果標(biāo)簽指定的地址找不到他就會(huì)去本地的maven倉(cāng)庫(kù)中找,如果本地倉(cāng)庫(kù)沒有那就去遠(yuǎn)程倉(cāng)庫(kù)找。
使用<relativePath/>指定一個(gè)空地址,他就會(huì)去本地倉(cāng)庫(kù)中找。
5、番外:方式二
還有一種方式那就是不使用繼承spring-boot-starter-parent的方式來管理springboot的依賴,我們可以點(diǎn)進(jìn)這個(gè)spring-boot-starter-parent的pom文件中查看,我們發(fā)現(xiàn)它也有一個(gè)父工程
<?xml version="1.0" encoding="UTF-8"?> <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.7.2</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>
我們?cè)冱c(diǎn)進(jìn)這個(gè)父工程spring-boot-dependencies看,(這是一部分),我們可以看到其實(shí)幫我們管理版本的是這個(gè)父工程,它的打包方式也是pom,在properties標(biāo)簽中管理了很多依賴的版本。
<?xml version="1.0" encoding="UTF-8"?> <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> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.7.2</version> <packaging>pom</packaging> <name>spring-boot-dependencies</name> <description>Spring Boot Dependencies</description> <url>https://spring.io/projects/spring-boot</url> <properties> <activemq.version>5.16.5</activemq.version> <antlr2.version>2.7.7</antlr2.version> <appengine-sdk.version>1.9.98</appengine-sdk.version> <artemis.version>2.19.1</artemis.version> <aspectj.version>1.9.7</aspectj.version> <assertj.version>3.22.0</assertj.version> <atomikos.version>4.0.6</atomikos.version> </properties> </project>
既然是這樣,還記得dependencyManagement標(biāo)簽嗎,這個(gè)標(biāo)簽可不是只能在父工程中才可以使用,我們?cè)谶@里使用該標(biāo)簽來導(dǎo)入spring-boot-dependencies為我們整理的依賴,這樣項(xiàng)目中國(guó)使用到的有關(guān)springboot的依賴就又可以不寫版本號(hào)了。
<?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> <artifactId>model1</artifactId> <packaging>jar</packaging> <!--自己的父工程--> <parent> <groupId>org.example</groupId> <artifactId>mavenParent</artifactId> <version>1.0-SNAPSHOT</version> <relativePath/> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <!-- 這里不需要指定版本號(hào),版本由下面的dependencyManagement管理了 --> </dependency> </dependencies> <!-- 這里dependencyManagement管理版本,只是管理版本,不導(dǎo)入依賴哦! --> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.7.2</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> </project>
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
解決springboot項(xiàng)目上傳文件出現(xiàn)臨時(shí)文件目錄為空的問題
這篇文章主要介紹了解決springboot項(xiàng)目上傳文件出現(xiàn)臨時(shí)文件目錄為空的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-09-09深入學(xué)習(xí)SpringCloud之SpringCloud簡(jiǎn)介
Spring Cloud是一個(gè)一站式的開發(fā)分布式系統(tǒng)的框架,為開發(fā)者提供了一系列的構(gòu)建分布式系統(tǒng)的工具集,本文給大家介紹springcloud的相關(guān)知識(shí),感興趣的朋友跟隨一起看看吧2021-04-04簡(jiǎn)要分析Java多進(jìn)程編程的并發(fā)控制
這篇文章介紹了簡(jiǎn)要分析Java多進(jìn)程編程的并發(fā)控制,主要針對(duì)內(nèi)存獲取方面,需要的朋友可以參考下2015-11-11Java實(shí)現(xiàn)IP地址到二進(jìn)制的轉(zhuǎn)換
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)IP地址到二進(jìn)制的轉(zhuǎn)換,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11springboot2.0使用Hikari連接池的方法(替換druid)
這篇文章主要介紹了springboot 2.0使用Hikari連接池的方法(替換druid),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12Spring?BeanFactory?與?FactoryBean?的區(qū)別詳情
這篇文章主要介紹了Spring?BeanFactory?與?FactoryBean?的區(qū)別詳情,BeanFactory?和?FactoryBean?的區(qū)別卻是一個(gè)很重要的知識(shí)點(diǎn),在本文中將結(jié)合源碼進(jìn)行分析講解,需要的小伙伴可以參考一下2022-05-05java多線程開發(fā)之通過對(duì)戰(zhàn)游戲?qū)W習(xí)CyclicBarrier
這篇文章給大家分享了關(guān)于java多線程開發(fā)中通過對(duì)戰(zhàn)游戲?qū)W習(xí)CyclicBarrier的相關(guān)知識(shí)點(diǎn)內(nèi)容,有興趣的朋友們學(xué)習(xí)參考下。2018-08-08