1. 程式人生 > >帶你深度解析Maven

帶你深度解析Maven

.com ima 一個 html nta tps 實現 隱藏 read

一、What`s Maven?

  Maven是基於項目對象模型(POM project object model),可以通過一小段描述信息(配置)來管理項目的構建,報告和文檔的軟件項目管理工具,簡單的說就是用來管理項目所需要的依賴且管理項目構建的工具。

二、Maven的優勢

  1. 約定優於配置

  2. 簡單

  3. 測試支持

  4. 構建簡單

  5. CI集成

  6. 插件豐富

三、Maven的安裝、配置

  1. 在官網下載安裝包:http://maven.apache.org/download.cgi

  2. 解壓縮壓縮包

  3. 配置環境變量MAVEN_HOME=maven的解壓後的目錄

  4. 在變量Path的開頭增加"%MAVEN_HOME%\bin;"

  5. 在MAVEN_HOME/conf/setting.xml文件中通過<localRepository></localRepository>標簽配置本地倉庫的位置

  註 :超級pom.xml的位置:MAVEN_HOME/lib/maven-model-build-3.3.9.jar/org/apache/maven/model/pom-4.0.0.xml

四、Maven的使用

1. 輸出本地安裝的maven的相關信息

mvn -version

2. 在IDEA中配置使用本地安裝的maven

打開: File-->Settings, 然後按照下圖操作

技術分享圖片

3. 控制臺使用maven命令,配置文件加載順序

  1) ~/.m2/setting.xml

  2) MAVEN_HOME/conf/setting.xml

五、配置Maven鏡像加快依賴下載速度

<mirrors>
  <mirror>
    <id>aliyun_cental</id>
    <name>aliyun_cental</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    <mirrorOf>central</mirrorOf>
  </mirror>
  <mirror>
    <id>uk</id>
    <mirrorOf>central</mirrorOf>
    <name>Human Readable Name for this Mirror.</name>
    <url>http://uk.maven.org/maven2</url>
  </mirror>
  <mirror>
    <id>osc</id>
    <name>Human Readable Name for this Mirror</name>
    <url>http://maven.oschina.net:/content/groups/public/</url>
    <mirrorOf>central</mirrorOf>
  </mirror>
  <mirror>
    <id>osc_thirdparty</id>
    <mirrorOf>thirdparty</mirrorOf>
    <url>http://maven.oschina.net/content/repositories/thirdparty/</url>
  </mirror>
</mirrors>

具體請移步另一篇博客:只用一招,讓你Maven依賴下載速度快如閃電

六、認識Maven的結構

1. maven項目結構

技術分享圖片

src/main/java : 項目java類文件位置

src/main/resources : 項目配置資源文件位置

src/test/java : 項目單元測試java類文件位置

src/test/resources : 項目單元測試配置資源文件位置

target : 項目打包後文件所在位置

2. setting.xml元素解讀: https://www.cnblogs.com/yangxia-test/p/4409736.html

3. pom.xml元素解讀: http://www.cnblogs.com/hafiz/p/5360195.html

七、Maven的坐標、依賴

1. 坐標:maven通過groupId、artifactId、version三個變量來唯一確定一個具體的依賴(俗稱GAV)

2. 依賴:在pom.xml中我們通過dependency來聲明坐標信息(GAV)如:

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-core</artifactId>
  <version>4.2.6.RELEASE</version>
</dependency>

  這樣我們就在項目中依賴了4.2.6.RELEASE版本的spring-core jar包.

  註pom.xml中packaging用來指定打包方式,默認為:jar

3. dependencyManagementy

  1) 只能出現在父pom裏

  2) 統一版本號

  3) 只是依賴聲明,並不直接依賴,需要時在子項目中在聲明要使用依賴的GA信息,V信息可以省略.

4. 依賴scope

  1) compile:編譯依賴範圍,在編譯,測試,運行時都需要,依賴範圍默認值

  2) test:測試依賴範圍,測試時需要。編譯和運行不需要,如junit

  3) provided:已提供依賴範圍,編譯和測試時需要。運行時不需要,如servlet-api

  4) runtime:運行時依賴範圍,測試和運行時需要。編譯不需要,例如面向接口編程,JDBC驅動實現jar

  5) system:系統依賴範圍。本地依賴,不在maven中央倉庫,結合systemPath標簽使用

5. 依賴傳遞時仲裁原則

  1) 路徑最短原則

  2) 路徑一樣長,加載先後原則

技術分享圖片

  註 : 第一列表示直接依賴的scope,第一行表示間接依賴的scope

6. 依賴排除

  使用<exclusions>標簽下的<exclusion>標簽指定GA信息來排除,例如:排除xxx.jar傳遞依賴過來的yyy.jar

<dependency>
  <groupId>com.xxx</groupId>
  <artifactId>xxx</artifactId>
  <version>x.version</version>
  <exclusions>
    <exclusion>
      <groupId>com.xxx</groupId>
      <artifactId>yyy</artifactId>
    </exclusion>
  </exclusions>
</dependency>

7. 依賴關系查看

進入工程根目錄,在cmd中運行

  1) mvn dependency:tree 命令會列出依賴關系樹及各級依賴關系

  2) mvn dependency:analyze 分析依賴關系

八、版本管理

  盡量使用語義化版本,方便團隊協作,後面我們專門寫一篇文章來說語義化版本。

  Maven中的版本號中帶SNAPSHOT和不帶的區別以及作用請移步:Maven版本號中隱藏的驚天大秘密

九、生命周期、插件

1. 生命周期

  A build lifecycle is made up of phases.

  A build phases is made up of plugin goals.

技術分享圖片

  1) clean(按順序分別包括:pre-clean 、clean 、post-clean)

  2) default(compile、package、install、deploy ...)

  3) site(又包括:pre-site、site、post-site、site-deploy)

2. 插件

  請移步另一篇文章:

十、自定義手寫Maven的項目骨架

  請移步另外一篇文章:手寫Maven的archetype項目腳手架

十一、總結

  通過本文,我們就對maven有了一個直觀深入的了解和學習,通過maven我們可以進行自己的定制和開發。這是工程化的第一步,我們繼續加油,下一步解析Git和Jenkins.

帶你深度解析Maven