Maven pom.xml 元素配置说明(一)
部分來源:
properties
假如一種場景:比如說spring的jar包版本,由于jar包較多,如果要修改,需要挨個修改,工作量巨大,因此可以使用 <properties>標簽,賦值之后,可以統一使用,統一修改。
<dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>4.3.5</version> </dependency>轉變為
<properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><spring.version>4.3.5</spring.version> </properties> <dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>${spring.version}</version> </dependency>dependencyManagement 與 dependencies
dependencies即使在子項目中不寫該依賴項,那么子項目仍然會從父項目中繼承該依賴項(全部繼承)
dependencyManagement里只是聲明依賴,并不實現引入,因此子項目需要顯示的聲明需要用的依賴。如果不在子項目中聲明依賴,是不會從父項目中繼承下來的;只有在子項目中寫了該依賴項,并且沒有指定具體版本,才會從父項目中繼承該項,并且version和scope都讀取自父pom;另外如果子項目中指定了版本號,那么會使用子項目中指定的jar版本。
Itoo-base(pom.xml) 繼承于 Itoo-base-parent(pom.xml)
示例如下:
Itoo-base-parent(pom.xml)
Itoo-base(pom.xml)
<!--繼承父類--> <parent> <artifactId>itoo-base-parent</artifactId> <groupId>com.tgb</groupId> <version>0.0.1-SNAPSHOT</version> <relativePath>../itoo-base-parent/pom.xml</relativePath> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>itoo-base</artifactId> <packaging>ejb</packaging> <!--依賴關系--> <dependencies> <dependency> <groupId>javax</groupId> <artifactId>javaee-api</artifactId> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> </dependency> <dependency> <groupId>org.eclipse.persistence</groupId> <artifactId>org.eclipse.persistence.jpa</artifactId> <scope>provided</scope> </dependency> </dependencies>請注意:
子類中沒有指明依賴項的版本信息,在頂層 pom 中的 dependencyManagement 中javaee-api表明其優選的版本是 ${javaee-api.version} ,版本信息會注入其中。
只有當 外層的dependencies 元素中沒有指明版本信息時, dependencyManagement 中的 dependencies 元素才起作用。
這樣做的好處:
統一管理項目的版本號,確保應用的各個項目的依賴和版本一致,才能保證測試的和發布的是相同的成果,因此,在頂層pom中定義共同的依賴關系。同時可以避免在每個使用的子項目中都聲明一個版本號,這樣想升級或者切換到另一個版本時,只需要在父類容器里更新,不需要任何一個子項目的修改;如果某個子項目需要另外一個版本號時,只需要在dependencies中聲明一個版本號即可。子類就會使用子類聲明的版本號,不繼承于父類版本號。
頂層 pom 中的 dependencies 與 dependencyManagement 中的 dependencies 元素有一個重要的區別:
dependencyManagement 中的 dependencies 元素只表明依賴項版本的優先選擇,并不影響項目的依賴項;而 dependencies 元素則影響項目的依賴項。
Profile
使用maven來實現多環境的構建可移植性,需要借助maven提供的profile功能,通過不同的環境激活不同的profile來達到構建的可移植性。
一、POM中profile的配置
首先是profile配置,在pom.xml中添加如下profile的配置:
這里定義了三個環境,dev(開發環境)、test(測試環境),其中開發環境是默認激活的(activeByDefault為true),這樣如果在不指定profile時默認是開發環境。
同時每個profile還定義了兩個屬性,其中profiles.active表示被激活的profile的配置文件的目錄。
二、工程目錄
針對不同的環境,我們定義不同的配置文件,而這些配置文件都做為資源文件放到maven工程的文件目錄下(已將src/main/resources改為config),即config目錄下,且各個環境的配置分別放到相應的目錄下,而所有環境都公用的配置,直接放到config目錄下即可。目錄結構如下所示:
如上所示,開發環境、測試環境的配置文件分別放到config目錄下的dev、test三個子目錄中,剩余公共的配置文件放于config目錄下。
三、POM文件中build配置
在pom中的build節點下,配置資源文件的位置,如下所示:
首先第一個資源文件位置config需要排隊提各個環境的配置文件,各個環境的配置我們在第三個節點中通過前面在profile中配置的profiles.active屬性來指定。即config/properties/${profiles.active}。這樣在激活指定的profile時,會加載指定目錄下的配置文件,如當前激活的是dev profile,那么這個資源目錄就是config/properties/dev。這樣就達到了不同環境加載不同配置的目的。
四、項目編譯生成
所有需要的配置就完成了,通過在運行maven命令時指定不同的profile即可構建不同環境需要的war包或發布到不同的環境了 。如:
war包解壓后,文件結構如下:
WEB-INFclassesspring.xmlspring-mvc.xmltest.properties由于默認的profile是dev,所以如果我們不指定profile,那么加載就是開發環境dev下的配置文件了。即我們在本地開發測試時,不用關心profile的問題。
轉載于:https://www.cnblogs.com/cuiyf/p/6257346.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的Maven pom.xml 元素配置说明(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: shoppping collectio
- 下一篇: 如何清理和删除 Docker 镜像