Maven的聚合(多模塊)和Parent繼承
即使是長期從事 Maven 工作的開發(fā)人員也不能完全掌握聚合(多模塊)和 Parent 繼承的關(guān)系,在使用多模塊時(shí),子模塊總要指定聚合的 pom 為 <parent>
。由于在大多數(shù)示例中都是這么寫的,所以很難讓人搞懂這兩者的具體作用和關(guān)系。
實(shí)際上在 Maven 中聚合(多模塊)和繼承是兩回事,兩者不存在直接聯(lián)系。
pom文檔地址:https://maven.apache.org/pom.html
Maven 完全參考:http://books.sonatype.com/mvnref-book/reference/index.html
繼承
繼承是 Maven 中很強(qiáng)大的一種功能,繼承可以使得子POM可以獲得 parent 中的各項(xiàng)配置,可以對(duì)子pom進(jìn)行統(tǒng)一的配置和依賴管理。父POM中的大多數(shù)元素都能被子POM繼承,這些元素包含:
- groupId
- version
- description
- url
- inceptionYear
- organization
- licenses
- developers
- contributors
- mailingLists
- scm
- issueManagement
- ciManagement
- properties
- dependencyManagement
- dependencies
- repositories
- pluginRepositories
- build
- plugin executions with matching ids
- plugin configuration
- etc.
- reporting
- profiles
注意下面的元素,這些都是不能被繼承的。
- artifactId
- name
- prerequisites
想要添加 parent,只需要像下面這樣寫。
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.codehaus.mojo</groupId> <artifactId>my-parent</artifactId> <version>2.0</version> <relativePath>../my-parent</relativePath> </parent> <artifactId>my-project</artifactId> </project>
其中relativePath
元素不是必須的,指定后會(huì)優(yōu)先從指定的位置查找父pom。
聚合(或多模塊)
具有模塊的項(xiàng)目被稱為多模塊或聚合項(xiàng)目。模塊是此POM列出并作為一組執(zhí)行的項(xiàng)目。通過一個(gè)pom
打包的項(xiàng)目可以將它們列為模塊來聚合成一組項(xiàng)目進(jìn)行構(gòu)建,這些模塊名是這些項(xiàng)目的相對(duì)目錄。
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.codehaus.mojo</groupId> <artifactId>my-parent</artifactId> <version>2.0</version> <packaging>pom</packaging> <modules> <module>my-project</module> <module>another-project</module> </modules> </project>
在列出模塊時(shí),不需要自己考慮模塊間依賴關(guān)系,即POM給出的模塊排序并不重要。Maven將對(duì)模塊進(jìn)行拓?fù)渑判?,使得依賴關(guān)系始終在依賴模塊之前構(gòu)建。
聚合 VS 父POM
雖然聚合通常伴隨著父POM的繼承關(guān)系,但是這兩者不是必須同時(shí)存在的,從上面兩者的介紹可以看出來,這兩者的都有不同的作用,他們的作用不依賴于另一個(gè)的配置。
父POM是為了抽取統(tǒng)一的配置信息和依賴版本控制,方便子POM直接引用,簡化子POM的配置。聚合(多模塊)則是為了方便一組項(xiàng)目進(jìn)行統(tǒng)一的操作而作為一個(gè)大的整體,所以要真正根據(jù)這兩者不同的作用來使用,不必為了聚合而繼承同一個(gè)父POM,也不比為了繼承父POM而設(shè)計(jì)成多模塊。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接
相關(guān)文章
Java基礎(chǔ)之內(nèi)部類與代理知識(shí)總結(jié)
今天帶大家復(fù)習(xí)Java的基礎(chǔ)知識(shí),文中有非常詳細(xì)的介紹及圖文示例,對(duì)正在學(xué)習(xí)Java的小伙伴們很有幫助,需要的朋友可以參考下2021-06-06springboot項(xiàng)目中controller層與前端的參數(shù)傳遞方式
這篇文章主要介紹了springboot項(xiàng)目中controller層與前端的參數(shù)傳遞方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-10-10springboot 返回json格式數(shù)據(jù)時(shí)間格式配置方式
這篇文章主要介紹了springboot 返回json格式數(shù)據(jù)時(shí)間格式配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11Spring Cloud Gateway組件的三種使用方式實(shí)例詳解
Spring Cloud Gateway是 Spring 官方基于 Spring5.0 、 SpringBoot2.0 和 Project Reactor 等技術(shù)開發(fā)的網(wǎng)關(guān)旨在為微服務(wù)框架提供一種簡單而有效的統(tǒng)一的API 路由管理方式,統(tǒng)一訪問接口,這篇文章主要介紹了Spring Cloud Gateway組件的三種使用方式,需要的朋友可以參考下2024-01-01springcloud gateway如何實(shí)現(xiàn)路由和負(fù)載均衡
這篇文章主要介紹了springcloud gateway如何實(shí)現(xiàn)路由和負(fù)載均衡的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07Java?JVM虛擬機(jī)調(diào)優(yōu)詳解
JVM是JavaVirtualMachine(Java虛擬機(jī))的縮寫,JVM是一種用于計(jì)算設(shè)備的規(guī)范,它是一個(gè)虛構(gòu)出來的計(jì)算機(jī),是通過在實(shí)際的計(jì)算機(jī)上仿真模擬各種計(jì)算機(jī)功能來實(shí)現(xiàn)的,本文主要介紹了jvm調(diào)優(yōu),感興趣的小伙伴們可以參考一下<BR>2022-07-07MyEclipse+Tomcat+MAVEN+SVN項(xiàng)目完整環(huán)境搭建(圖文教程)
這篇文章主要介紹了MyEclipse+Tomcat+MAVEN+SVN項(xiàng)目完整環(huán)境搭建(圖文教程),非常具有實(shí)用價(jià)值,需要的朋友可以參考下2017-12-12