maven使用記錄

很多人說maven學習曲線非常陡,確實如此,但對於初學者來說,沒必要一下子跨越那條鴻溝,簡單的讓項目run起來,是最正確的學習思路!還有就是平時多用,帶着問題去學習也是快捷之道。

安裝maven,線上有很多教程,暫且跳過。
羅列下我工作中常用的maven命令:
    1. maven clean install
    2. maven eclipse:eclipse
    3. maven jetty:run
    4. maven dependency:tree > ***.txt
其實這些簡單的命令已經基本夠用,關鍵還是要知道maven能解決問題的範疇。遇到問題,再搜索下相關資料即可!

在工作中一般都是在已有的工程中進行開發,大多數情況是理解現有工程的結構目錄、添加功能模塊等。這樣,對於maven理解的重心應該是pom.xml。

pom.xml是maven的核心,maven可以說是半智能的將我們需要依賴的二方庫依賴(或間接依賴)進來。爲什麼有間接依賴,其實對於使用過maven的人來說,很好理解。pom.xml主要用來控制我們需要依賴進來的包問題(不會自動解決衝突)。以前對於手工時代的我們,若需要使用外部提供的jar包時,我們會去相應的網站下載相應的jar,然後手動導入eclipse工程的lib目錄,通過這種手動的方式,不僅效率低下,而且還得了解jar包之間的依賴關係:你想使用一個jar,可能需要將該jar依賴的亂七八糟的jar一一找出來,才能實現使項目運行起來。說到這,也許你就理解,maven的pom其實就是爲我們做了這件事!

比如說我們現在想在我們工程中使用spring,那你就可以通過如下網址找到spring的pom文件:http://mvnrepository.com/,這個就是maven的倉庫(google可以搜索到),基本可以滿足我們使用開源軟件的需求,若你使用你們自己公司內部的jar,那在這裏是搜不到的,得從你們公司內部倉庫中搜索。就拿spring來說, 我們可以搜索到如下的dependency:
<dependency>
 <groupId>org.springframework</groupId>
 <artifactId>spring-core</artifactId>
 <version>3.2.5.RELEASE</version>
</dependency>
將該內容填入你建立的工程的pom文件件的dependencys標籤下即可!對於spring有可能需要間接依賴其他的jar,這你就不用管了,maven幫你搞定,這就是maven給我們帶來的好處之一。

當然有間接依賴,那麼你對於工程中具體被依賴進來多少包就不清楚了。而且jar衝突的事時有發生(其實即使你手動添加相應的jar,還是會遇到同樣的問題,畢竟內部文件你不可能全部瞭解)。那麼對於這種情況的出現,我們就需要將本工程所有依賴進來的jar全部列出來,這樣有利於我們進行排查,也就是mvn dependency:tree > ***.txt的用處。

其實生成依賴樹文件應該是到排除jar時期採用的。遇到衝突,我們一般的處理步驟爲:1、查看錯誤日誌,找到衝突的類(日誌一般是報:找不到相應的類***);2、在eclipse中使用crtl+alt+t,輸入衝突的類名字,看一共會出現幾個類(前提是限制在本工程內進行查找)。出現多個,那就是問題的所在;3、將不正確的jar找到後,再從生成的依賴樹文件,也即maven dependency:tree > ***.txt中找到該jar的gropupId與artifactId,再exclusion掉即可,如下:
依賴樹文件:
一般如其中的一條依賴樹: org.springframework:org.springframework.context:jar:3.0.1.RELEASE:compile,分別代表 gropupId:artifactId:packaging:version:時期。通過這個,我們就可以找出需要排查的jar的groupId與artifactId,如(排出時不需要指定版本):
<exclusions>
     <exclusion>
      <groupId>org.springframework</groupId>
      <artifactId>org.springframework.context</artifactId>
     </exclusion>
</exclusions>

上面已經將工作中常見的使用場景介紹了下。那麼還有一個重點,還未介紹:那就是創建工程。其實對於maven來說僅是一條命令的事。

1、cmd進入你想創建工程的目錄中,再運行以下命令:
mvn archetype:create -DgroupId=com.ankon.test -DartifactId=ankon -DpackageName=com.ankon.test
先解釋下這條命令的含義:(1)archetype:create,表示用archetype 快速創建一個項目(在這條命令中,表示我生成的包爲默認形式:jar包),(2)groupId/artifact/version,可以唯一制定一個jar包的座標,-DgroupId和-DartifactId參數也就是起到定位座標的功效,一般groupId是你所有公司或xxx的網址的倒序(這個大家都知道爲倒序,而我只是測試,壓根就沒有test.ankon.com這個網址),-DartifactId其實從最終生成出的工程來看,就是指代你的工程名字了,大家可以按自己需要進行修改,(4)-DpackageName就是在你生成後的工程中,默認幫你添加的包目錄

2、運行如下命令,生成eclipse可以導入的工程:
mvn eclipse:eclipse

3、導入看看目錄結構:

4、生成jar包命令:
mvn clean install
在你工程的target目錄下,就可以找到相應的snapshot版本的臨時jar文件了。

5、那我想生成web工程怎麼辦?還是一條命令即可:
mvn archetype:create -DgroupId=com.ankon.test -DartifactId=ankonWeb -DarchetypeArtifactId=maven-archetype-webapp
其中:-DarchetypeArtifactId代表使用的項目骨架的類型 ,此處爲web工程插件。
當然還有其他骨架類型如下:
* maven-archetype-archetype 
* maven-archetype-j2ee-simple 
* maven-archetype-mojo 
* maven-archetype-portlet 
* maven-archetype-profiles (currently under development) 
* maven-archetype-quickstart 
* maven-archetype-simple (currently under development) 
* maven-archetype-site 
* maven-archetype-site-simple 
* maven-archetype-webapp 
 
5.1 導入eclipse看看目錄結構:

6、當開發時,有可能還會遇到這樣的錯誤,編譯時:

從此處就可以很明顯的看出,我使用了註解,而註解是在JDK1.5之後才引入的,所以,需要將制定maven編譯版本在JDK1.5之上
那麼在根目錄的pom.xml之中加入:

我在此處指定用1.6打包編譯。

至此,可以告一段落。







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