maven介紹

以前在日常工作中,使用Maven只是機械的執行Maven clean、Maven install,對其中的原理與過程並無瞭解,近期閱讀了《Maven實戰》,對Maven有了更深入的理解。 本篇就針對讀書後的理解,對Maven的日常使用相關的知識進行總結與歸納。 如果想要了解更多內容參考:《Maven實戰

1 什麼是Maven?

如果沒有Maven,你可能不得不經歷下面的過程:

1 如果使用了spring,去spring的官網下載jar包;如果使用hibernate,去hibernate的官網下載Jar包;如果使用Log4j,去log4j的官網下載jar包…..

2 當某些jar包有依賴的時候,還要去下載對應的依賴jar包

3 當jar包依賴有衝突時,不得不一個一個的排查

4 執行構建時,需要使用ant寫出很多重複的任務代碼

5 當新人加入開發時,需要拷貝大量的jar包,然後重複進行構建

6 當進行測試時,需要一個一個的運行….檢查

有了Maven,它提供了三種功能:

1 依賴的管理:僅僅通過jar包的幾個屬性,就能確定唯一的jar包,在指定的文件pom.xml中,只要寫入這些依賴屬性,就會自動下載並管理jar包。

2 項目的構建:內置很多的插件與生命週期,支持多種任務,比如校驗、編譯、測試、打包、部署、發佈…

3 項目的知識管理:管理項目相關的其他內容,比如開發者信息,版本等等

2 Maven如何管理jar包

關於jar包的座標,有過使用經驗的都應該有所瞭解,maven是通過groupId,artifactId,以及version確定一個唯一的jar包。

這部分的內容可以參考前一篇:構建過程

例如,最常使用的Junit的聲明就是如下:

<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>4.12</version>
  <scope>test</scope> 這是聲明的範圍,不同的生命週期所要求的範圍是不一樣的,詳情參考《Maven實戰》
</dependency>

首先先來說說Maven下載jar包的過程:

在Maven中會涉及到幾種倉庫:

1 工作空間,即我們的項目工程,這裏面可能會放着pom.xml文件,這個pom.xml就是maven的配置文件

2 本地倉庫,本地倉庫用於存放jar包,其實Jar包並不是直接放入工作空間的,它是存放在本地倉庫,然後在執行發佈打包的時候,添加依賴路徑

3 私庫:私庫是使用者自己搭建的maven倉庫,用於緩解頻繁從外網下載jar包資源的壓力。而且使用私庫作爲緩存層,也相對安全一些。

4 共享倉庫:書中所說的中央倉庫或者一些常用的鏡像網站都屬於這種,國內比較著名的oschina以及163都是不錯的maven倉庫。

當我們在pom中聲明瞭依賴關係後,參考上面的圖:

1 Maven在執行相關的任務時,會先去本地倉庫查看是否有該資源,如果有的話,判斷版本是否正確,如果一切都沒問題則直接使用;否則,執行下一步

2 Maven會去配置的共享倉庫中查找,如果找到就拷貝到本地倉庫中;找不到則會給出相關的提示

3 Maven在本地如果搭建了私庫,則會去私庫中查找,找到就拷貝到本地倉庫;找不到就會去共享倉庫中查找,然後放入私庫和本地庫。有了私庫,局域網內的開發者可以共享依賴,就不用每個人都去外網下載jar包,浪費帶寬了。

關於本地倉庫和共享倉庫的配置都在settings.xml中,這個文件位於conf中,如果沒有則拷貝一份即可。

View Code

其中本地倉庫的配置爲:

<localRepository>F:\apache-maven-3.3.9\repo</localRepository>

默認是在 用戶的本地目錄/.m2/repository中。

共享倉庫的地址配置爲:

  <mirrors>
    <mirror>
      <id>CN</id>
      <name>OSChina Central</name>                           
      <url>http://maven.oschina.net/content/groups/public/</url>
      <mirrorOf>central</mirrorOf>
    </mirror>
  </mirrors>

3 Maven的生命週期與階段

Maven中有三大生命週期,他們相互獨立,分別是:

1 clean 清理

2 default 構建

3 site 建站

一般來說,clean和default比較常用。

每個生命週期又有不同的階段,階段按順序執行,並且可以指定執行結束的階段。構建的時候,會依次從最上面的階段執行到指定的那個階段

比如,clean有3個階段:

1 pre-clean 執行清理前要完成的工作
2 clean 清理上一次構建生成的文件
3 post-clean 執行清理後需要完成的工作

當我們輸入mvn clean的時候,執行的是pre-clean和clean兩個階段。

default的階段比較多:

1 validate
2 initialize
3 generate-sources
4 process-sources
5 generate-resources
6 process-resources
7 compile
8 process-classes
9 generate-test-sources
10 process-test-sources
11 generate-test-resources
12 process-test-resources
13 test-compile
14 process-test-classes
15 tet
16 prepare-package
17 package
18 pre-integration-test
19 integration-test
20 post-integration-test
21 verify
22 install
23 deploy

看名字大概就能理解,當執行mvn install的時候,實際會執行validate–>initialize–>…–>verify–>install等二十幾個階段。

爲了操作方便,不同的聲明週期可以在一起執行,比如mvn clean install,會先執行clean的階段,在執行install的階段。

在IDE開發環境中,當我們Run as的時候,就可以執行maven clean進行清理,或者執行maven install進行構建,也可以執行maven build同時執行clean和install兩個任務。

基本上了解上面兩個知識點,就足夠日常工作使用了。當然Maven可不止這麼一點點的東西,比如它還涉及到自定義構建任務、間接依賴的管理、插件的使用、私庫的搭建等等,如果需要的話,讀者可以參考《Maven實戰》,這本書講述的很全面了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章