maven之聚合和繼承
maven聚合工程時為了方便管理,可能一個工程有多個子模組,這時可以建立聚合工程管理.
maven繼承是為了方便jar包管理,比如:可能A B C三個工程都需要junit jar包,在每個工程新增jar包依賴會顯得重複,這時只需要建立一個工程讓A B C繼承,在父工程中新增公共依賴就可以了.
用Eclipse建立聚合工程:
先建立聚合父工程:
注意打包方式選擇pom
再建立聚合子工程
============================
聚合子工程a的pom.xml
預設子聚合工程是繼承父工程的.<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> <parent> <groupId>com.test</groupId> <artifactId>parent</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <artifactId>a</artifactId> </project>
如不想繼承只想聚合,刪除parent標籤,修改artifactId
<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>com.test</groupId> <artifactId>c</artifactId> <version>0.0.1-SNAPSHOT</version> </project>
繼承工程只需要在父工程中新增jar包,子工程就會自動新增.
==============================
maven jar包版本管理
<properties>
<hinernate.version>5.0.7.Final</hinernate.version>
<spring.version>4.2.4.RELEASE</spring.version>
<struts.version>2.3.24</struts.version>
</properties>
<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>${hinernate.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency>
==================================
dependencyManagement
Maven 使用dependencyManagement 元素來提供了一種管理依賴版本號的方式。通常會在一個組織或者專案的最頂層的父POM 中看到dependencyManagement 元素。使用pom.xml 中的dependencyManagement 元素能讓
所有在子專案中引用一個依賴而不用顯式的列出版本號。Maven 會沿著父子層次向上走,直到找到一個擁有dependencyManagement 元素的專案,然後它就會使用在這個dependencyManagement 元素中指定的版本號。
例如在父專案裡:
Xml程式碼- <dependencyManagement>
- <dependencies>
- <dependency>
- <groupId>mysql</groupId>
- <artifactId>mysql-connector-java</artifactId>
- <version>5.1.2</version>
- </dependency>
- ...
- <dependencies>
- </dependencyManagement>
然後在子專案裡就可以新增mysql-connector時可以不指定版本號,例如:
Xml程式碼- <dependencies>
- <dependency>
- <groupId>mysql</groupId>
- <artifactId>mysql-connector-java</artifactId>
- </dependency>
- </dependencies>
這樣做的好處就是:如果有多個子專案都引用同一樣依賴,則可以避免在每個使用的子專案裡都宣告一個版本號,這樣當想升級或切換到另一個版本時,只需要在頂層父容器裡更新,而不需要一個一個子專案的修改 ;另外如果某個子專案需要另外的一個版本,只需要宣告version就可。
在Maven中dependencyManagement的作用其實相當於一個對所依賴jar包進行版本管理的管理器。
pom.xml檔案中,jar的版本判斷的兩種途徑
1.如果dependencies裡的dependency自己沒有宣告version元素,那麼maven就會倒dependencyManagement裡面去找有沒有對該artifactId和groupId進行過版本宣告,如果有,就繼承它,如果沒有就會報錯,告訴你必須為dependency宣告一個version。
2.如果dependencies中的dependency聲明瞭version,那麼無論dependencyManagement中有無對該jar的version宣告,都以dependency裡的version為準。
========================
jar包排除
jar包版本衝突,如果這兩個jar包同時存在,會導致後續某些操作會存在問題(比如openSessionInView失效),所以需要排除低版本的jar包。
如何來排除依賴呢?新增下面紅色字型的部分。作用是排除struts中依賴的javassist的jar
<dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-core</artifactId> <version>2.3.24</version> <exclusions> <exclusion> <groupId>javassist</groupId> <artifactId>javassist</artifactId> </exclusion> </exclusions> </dependency> |