Apache Maven,是一個軟件(特別是Java軟件)項目管理及自動構建工具,由Apache軟件基金會所提供。基於項目對象模型(POM)概念,Maven利用一個中央信息片斷能管理一個項目的構建、報告和文檔等步驟。曾是Jakarta項目的子項目,現為獨立Apache項目。
現在有很多Apache項目都已經開始采用Maven進行管理。
本篇文章簡單介紹了Maven的相關知識,以及在Linux下的安裝與使用方法。如果需要進一步了解Maven,請移步Maven官網。http://maven.apache.org
安裝Maven
Maven的下載地址:http://maven.apache.org/download.cgi
這里以最新的3.2.3版本為例進行安裝,在這之前需要確保機器上已經安裝了JDK。
首先下載Maven並解壓,並移動到usr/local目錄下
1 |
$ wget http://mirror.bit.edu.cn/apache/maven/maven-3/3.2.3/binaries/apache-maven-3.2.3-bin.tar.gz |
修改環境變量,在/etc/profile中添加以下幾行
1 |
MAVEN_HOME=/usr/local/maven3 |
記得執行source /etc/profile
使環境變量生效。
最后運行mvn -v
驗證maven是否安裝成功,如果安裝成功會打印如下內容
1 |
Apache Maven 3.2.3 (33f8c3e1027c3ddde99d3cdebad2656a31e8fdf4; 2014-08-12T04:58:10+08:00) |
使用Maven創建項目
無論是學習語言還是框架,先來一個Hello World基本上已經是套路了,我們也通過構建一個Hello World項目來了解如何使用Maven。
首先通過maven創建helloworld項目
1 |
$ mvn archetype:create -DgroupId=helloworld -DartifactId=helloworld |
生成的項目目錄如下,其中src/main/java是源碼目錄,src/test/java是測試文件目錄。
一共只有三個文件,打開這三個文件,可以看到App.java中已經寫好了一個Hello World程序,而AppTest中是Junit單元測試的代碼,至於pom.xml,則給出了項目的一些基本信息以及依賴關系。
1 |
helloworld/ |
這里主要看一下pom.xml文件,內容如下
1 |
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
在pom.xml文件中,首先描述了項目的定義,groupId:artifactId:packaging:version這個四元組能夠唯一標記一個項目。我們不僅可以用這個四元組來標記我們的項目,也可以用來標記其它的項目,比如用來描述項目依賴關系。perperties中定義了項目的屬性,也可以在這里定義變量並在其它的地方引用。至於最后的dependencies,則是描述了項目的依賴關系,Maven會根據依賴關系自動下載相應的文件並在編譯時使用。
在大型項目開發中,往往會將其分成若干個子項目,每個子項目都有着自己的的pom.xml,它們與父pom.xml之間相當於繼承的關系。
可以說,pom.xml文件的配置是整個Maven的核心重點,也是學習Maven過程中需要詳細了解的內容。這里只給出了最簡單的配置樣例,詳細了解可以查看官方文檔。
接下來編譯並運行Helloworld項目。
如果是第一次編譯的話,需要聯網,因為Maven會自動下載依賴包。
1 |
$ mvn package |
下載的依賴包會保存在~/.m2/repository文件夾中,打開這個文件夾,我們會發現里面的包正是按前面所說的四元組目錄結構進行存儲的。Maven在依賴一個jar包時會先去本地庫查找,如果沒找到就會從網上下載。當然,並不是所有的包都能從網上下載到,比如我們自己開發的jar包,這時,我們就可以用mvn install
命令將一個項目安裝到本地倉庫。
打包成功后我們會發現項目中多了一個target文件夾,目錄結構如下
1 |
target/ |
可以看到,在package過程中,maven完成了編譯、測試代碼,生成測試報告,生成jar包等一系列工作。
最后,我們也可以手動運行jar包查看結果。
1 |
$ java -cp target/helloworld-1.0-SNAPSHOT.jar helloworld.App |
Maven常用命令
Maven的命令非常多,學習命令首先要了解Maven的生命周期。
Maven首先會驗證並處理引用資源,之后進行項目編譯,如果沒有聲明跳過測試,也會編譯測試代碼並進行測試、以成測試報告。最后,Maven會將編譯好的內容進行打包,用於發布。
Maven命令與Maven的生命周期有着對應的關系,一個命令也經常會包含多個生命周期,比如mvn package
會完成以上所有步驟。
這里列舉幾個常用的命令
1 |
mvn compile 編譯項目 |
吐槽
在用Maven編譯一些Apache項目的時候,實在是想吐槽GFW!!如果不翻牆經常是編譯到一半就有個文件Download不下來了。。