Maven介紹,包括做用、核心概念、用法、經常使用命令、擴展及配置

由淺入深,主要介紹maven的用途、核心概念(Pom、Repositories、Artifact、Build Lifecycle、Goal)、用法(Archetype意義及建立各類項目)、maven經常使用參數和命令以及簡單故障排除、maven擴展(eclipse、cobertura、findbugs、插件開發)、maven配置
較長,可根據我的須要有選擇性的查看,好比先看用法再回過頭來看核心概念html

一、maven的用途
maven是一個項目構建和管理的工具,提供了幫助管理 構建、文檔、報告、依賴、scms、發佈、分發的方法。能夠方便的編譯代碼、進行依賴管理、管理二進制庫等等。
maven的好處在於能夠將項目過程規範化、自動化、高效化以及強大的可擴展性
利用maven自身及其插件還能夠得到代碼檢查報告、單元測試覆蓋率、實現持續集成等等。java

 

二、maven的核心概念介紹
2.1 Pom
pom是指project object Model。pom是一個xml,在maven2裏爲pom.xml。是maven工做的基礎,在執行task或者goal時,maven會去項目根目錄下讀取pom.xml得到須要的配置信息
pom文件中包含了項目的信息和maven build項目所需的配置信息,一般有項目信息(如版本、成員)、項目的依賴、插件和goal、build選項等等
pom是能夠繼承的,一般對於一個大型的項目或是多個module的狀況,子模塊的pom須要指定父模塊的pomreact

pom文件中節點含義以下:web

其中groupId:artifactId:version惟一肯定了一個artifactapache

 

2.2 Artifact
這個有點很差解釋,大體說就是一個項目將要產生的文件,能夠是jar文件,源文件,二進制文件,war文件,甚至是pom文件。每一個artifact都由groupId:artifactId:version組成的標識符惟一識別。須要被使用(依賴)的artifact都要放在倉庫(見Repository)中windows

 

2.3 Repositories
Repositories是用來存儲Artifact的。若是說咱們的項目產生的Artifact是一個個小工具,那麼Repositories就是一個倉庫,裏面有咱們本身建立的工具,也能夠儲存別人造的工具,咱們在項目中須要使用某種工具時,在pom中聲明dependency,編譯代碼時就會根據dependency去下載工具(Artifact),供本身使用。
對於本身的項目完成後能夠經過mvn install命令將項目放到倉庫(Repositories)中
倉庫分爲本地倉庫和遠程倉庫,遠程倉庫是指遠程服務器上用於存儲Artifact的倉庫,本地倉庫是指本機存儲Artifact的倉庫,對於windows機器本地倉庫地址爲系統用戶的.m2/repository下面。
對於須要的依賴,在pom中添加dependency便可,能夠在maven的倉庫中搜索:http://mvnrepository.com/服務器

 

2.4 Build Lifecycle
是指一個項目build的過程。maven的Build Lifecycle分爲三種,分別爲default(處理項目的部署)、clean(處理項目的清理)、site(處理項目的文檔生成)。他們都包含不一樣的lifecycle。
Build Lifecycle是由phases構成的,下面重點介紹default Build Lifecycle幾個重要的phaseapp

以上的phase是有序的(注意實際兩個相鄰phase之間還有其餘phase被省略,完整phase見lifecycle),下面一個phase的執行必須在上一個phase完成後eclipse

若直接以某一個phase爲goal,將先執行完它以前的phase,如mvn install
將會先validate、compile、test、package、integration-test、verify最後再執行install phasewebapp

 

2.5 Goal
goal表明一個特定任務

mvn package表示打包的任務,經過上面的介紹咱們知道,這個任務的執行會先執行package phase以前的phase
mvn deploy表示部署的任務
mven clean install則表示先執行clean的phase(包含其餘子phase),再執行install的phase。

 

三、maven用法
主要講下Archetype以及幾種經常使用項目的建立
maven建立項目是根據Archetype(原型)建立的。下面先介紹下Archetype
3.1 Archetype
原型對於項目的做用就至關於模具對於工具的做用,咱們想作一個錘子,將鐵水倒入模具成型後,稍加修改就能夠了。
相似咱們能夠根據項目類型的須要使用不一樣的Archetype建立項目。經過Archetype咱們能夠快速標準的建立項目。利用Archetype建立完項目後都有標準的文件夾目錄結構
既然Archetype至關於模具,那麼固然能夠本身再造模具了啊,建立Archetype
下面介紹利用maven自帶的集中Archetype建立項目。建立項目的goal爲mvn archetype:generate,而且指定archetypeArtifactId,其中archetypeArtifactId見maven自帶的archetypeArtifactId

 

3.2 quick start工程
建立一個簡單的quick start項目,指定 -DarchetypeArtifactId爲maven-archetype-quickstart,以下命令
Xml代碼 收藏代碼
mvn archetype:generate -DgroupId=com.trinea.maven.test -DartifactId=maven-quickstart -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
其中DgroupId指定groupId,DartifactId指定artifactId,DarchetypeArtifactId指定ArchetypeId,
DinteractiveMode表示是否使用交互模式,交互模式會讓用戶填寫版本信息之類的,非交互模式採用默認值
這樣咱們便建好了一個簡單的maven項目,目錄結構以下:

maven quick start

如今咱們能夠利用2.4的build Lifecycle進行一些操做,先命令行到工程根目錄下
編譯 mvn compile
打包 mvn package,此時target目錄下會出現maven-quickstart-1.0-SNAPSHOT.jar文件,即爲打包後文件
打包並安裝到本地倉庫mvn install,此時本機倉庫會新增maven-quickstart-1.0-SNAPSHOT.jar文件。

 

3.3 web工程
建立一個簡單的web項目,只須要修 -DarchetypeArtifactId爲maven-archetype-webapp便可,以下命令

maven web start

其餘:

src\main\resources文件夾是用來存放資源文件的,maven工程默認沒有resources文件夾,若是咱們須要用到相似log4j.properties這樣的配置文件,就須要在src\main文件夾下新建resources文件夾,並將log4j.properties放入其中。
test須要用到資源文件,相似放到src\test下
對於apache的log4j沒有log4j.properties文件或是目錄錯誤,會報以下異常

 

四、maven經常使用參數和命令
主要介紹maven經常使用參數和命令以及簡單故障排除

4.1 mvn經常使用參數
mvn -e 顯示詳細錯誤
mvn -U 強制更新snapshot類型的插件或依賴庫(不然maven一天只會更新一次snapshot依賴)
mvn -o 運行offline模式,不聯網更新依賴
mvn -N僅在當前項目模塊執行命令,關閉reactor
mvn -pl module_name在指定模塊上執行命令
mvn -ff 在遞歸執行命令過程當中,一旦發生錯誤就直接退出
mvn -Dxxx=yyy指定java全局屬性
mvn -Pxxx引用profile xxx

 

4.2 首先是2.4 Build Lifecycle中介紹的命令
mvn test-compile 編譯測試代碼
mvn test 運行程序中的單元測試

mvn compile 編譯項目
mvn package 打包,此時target目錄下會出現maven-quickstart-1.0-SNAPSHOT.jar文件,即爲打包後文件
mvn install 打包並安裝到本地倉庫,此時本機倉庫會新增maven-quickstart-1.0-SNAPSHOT.jar文件。
每一個phase均可以做爲goal,也能夠聯合,如以前介紹的mvn clean install

 

4.3 maven 日用三板斧
mvn archetype:generate 建立maven項目
mvn package 打包,上面已經介紹過了
mvn package -Prelease打包,並生成部署用的包,好比deploy/*.tgz
mvn install 打包並安裝到本地庫
mvn eclipse:eclipse 生成eclipse項目文件
mvn eclipse:clean 清除eclipse項目文件
mvn site 生成項目相關信息的網站

 

4.4 maven插件經常使用參數
mvn -Dwtpversion=2.0 指定maven版本
mvn -Dmaven.test.skip=true 若是命令包含了test phase,則忽略單元測試
mvn -DuserProp=filePath 指定用戶自定義配置文件位置
mvn -DdownloadSources=true -Declipse.addVersionToProjectName=true eclipse:eclipse 生成eclipse項目文件,嘗試從倉庫下載源代碼,而且生成的項目包含模塊版本(注意若是使用公用POM,上述的開關缺省已打開)

 

4.5 maven簡單故障排除

mvn -Dsurefire.useFile=false若是執行單元測試出錯,用該命令能夠在console輸出失敗的單元測試及相關信息
set MAVEN_OPTS=-Xmx512m -XX:MaxPermSize=256m 調大jvm內存和持久代,maven/jvm out of memory error
mvn -X maven log level設定爲debug在運行
mvndebug 運行jpda容許remote debug
mvn –help 這個就不說了。。

 

五、maven擴展
maven經常使用插件配置和使用

 

六、maven配置
爲了修改maven建立項目默認以來的jdk版本,看了下maven配置
maven2.0默認使用jdk1.5致使檢討、@override 等annotation不可用。可用兩種方法修改jdk版本
第一種:修改項目的pom.xml,影響單個項目,治標不治本

pom中增長build配置,指定java版本爲1.6
第二種:修改maven配置,影響maven創建的全部項目
到maven安裝目錄的conf文件夾下,修改settings.xml文件,以下:

這樣便能對全部默認的maven項目指定jdk爲1.6

 

到此爲止,休息會兒

 

參考資料:
Maven官方文檔:http://maven.apache.org/guides/index.html
maven安裝:http://maven.apache.org/download.html

相關文章
相關標籤/搜索