Maven學習筆記

一、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

發佈了32 篇原創文章 · 獲贊 7 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章