一、Pom文件
1.定義全局變量
在Maven的pom.xml文件中,
<properties>用於定義全局變量,
在POM中通過${property_name}的形式引用變量的值。
2.POM中的全局變量可以分爲如下5種類型:
系統Shell的環境變量env.property_name,如
${env.PATH}
表示引用當前系統的PATH變量值,注意這裏的PATH必須都是大寫。
Java System Properties,即Java屬性文件
${java.home}
project.property_name,直接引用POM中的元素值
${project.version}
表示引用<project><version>1.0</version></project>中的1.0
settings.property_name,直接引用settings.xml中的元素值
${settings.offline}
表示引用<settings<offline>false</offline></settings>中的false
property_name,
直接訪問<properties>中已經定義的變量值
${myVar}
表示引用<properties><myVar>myvalue</myVar></properies>中的myvalue
3.dependencyManagement標籤
作用:
在Maven中dependencyManagement的作用其實相當於一個對所依賴jar包進行版本管理的管理器。
jar版本
1.如果dependencies裏的dependency自己沒有聲明version元素,那麼maven就會到dependencyManagement裏面去找有沒有對該artifactId和groupId進行過版本聲明,如果有,就繼承它,如果沒有就會報錯,告訴你必須爲dependency聲明一個version
2.如果dependencies中的dependency聲明瞭version,那麼無論dependencyManagement中有無對該jar的version聲明,都以dependency裏的version爲準。
用法
//只是對版本進行管理,不會實際引入jar
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>3.2.7</version>
</dependency>
</dependencies>
</dependencyManagement>
//會實際下載jar包
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</dependency>
</dependencies>
4.package標籤
packaging給出了項目的打包類型,即作爲項目的發佈形式,其可能的類型。在Maven 3中,其可用的打包類型如下:
jar,默認類型
war
ejb
ear
rar
par
pom
maven-plugin
<packaging>war</packaging>
5.modules標籤
Maven 3支持Maven項目的多模塊(multi-modules)結構。這樣的Maven項目也被稱爲聚合項目,通常由一個父模塊和若干個子模塊構成。
其中,父模塊必須以pom打包類型,同時以
<modules>
給出所有的子模塊。父模塊的POM示例如下:
<packaging>pom</packaging>
<modules>
<module>my-frontend-project</module>
<module>my-service-project</module>
<module>my-backend-project</module>
</modules>
二、Maven命令行工具
1.Maven打包過程中跳過測試
mvn install -DskipTests
或者
mvn install -Dmaven.test.skip=true
2.查看依賴樹
解決問題:解決依賴衝突問題
控制檯
mvn dependency:tree
將結果打印到指定文件
mvn dependency:tree --> tree.txt
三、Maven問題實戰
1、依賴衝突
什麼是依賴衝突
舉例
A依賴於B及C,而B又依賴於X、Y,而C依賴於X、M,則A除引B及C的依賴包下,還會引入X,Y,M的依賴包(一般情況下了,Maven可通過等若干種方式控制傳遞依賴)。
這裏有一個需要特別注意的,即B和C同時依賴於X,假設B依賴於X的1.0版本,而C依賴於X的2.0版本,A究竟依賴於X的1.0還是2.0版本呢?
這就看Classloader的加載順序了,假設Classloader先加載X_1.0,而它就不會再加載X_2.0了,如果A恰恰希望使用X_2.0呢,血案就這樣不期而遇了。
哪個jar衝突了
按照下面這個文檔來查找
https://blog.csdn.net/sun_wangdong/article/details/51852113