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目錄下
$ wget http://mirror.bit.edu.cn/apache/maven/maven-3/3.2.3/binaries/apache-maven-3.2.3-bin.tar.gz
$ tar vxf apache-maven-3.2.3-bin.tar.gz
$ mv apache-maven-3.2.3 /usr/local/maven3
修改環境變量,在/etc/profile中添加以下幾行
MAVEN_HOME=/usr/local/maven3
export MAVEN_HOME
export PATH=${PATH}:${MAVEN_HOME}/bin
記得執行source /etc/profile
使環境變量生效。
最后運行mvn -v
驗證maven是否安裝成功,如果安裝成功會打印如下內容
Apache Maven 3.2.3 (33f8c3e1027c3ddde99d3cdebad2656a31e8fdf4; 2014-08-12T04:58:10+08:00)
Maven home: /usr/local/maven3
Java version: 1.7.0_65, vendor:
Oracle Corporation
Java home: /usr/lib/jvm/java-7-openjdk-amd64/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.13.0-35-generic", arch: "amd64", family: "unix"
使用Maven創建項目
無論是學習語言還是框架,先來一個Hello World基本上已經是套路了,我們也通過構建一個Hello World項目來了解如何使用Maven。
首先通過maven創建helloworld項目
$ mvn archetype:create
-DgroupId=helloworld -DartifactId=helloworld
生成的項目目錄如下,其中src/main/java是源碼目錄,src/test/java是測試文件目錄。
一共只有三個文件,打開這三個文件,可以看到App.java中已經寫好了一個Hello World程序,而AppTest中是Junit單元測試的代碼,至於pom.xml,則給出了項目的一些基本信息以及依賴關系。
helloworld/
├── pom.xml
└── src
├── main
│ └── java
│ └── helloworld
│ └── App.java
└── test
└── java
└── helloworld
└── AppTest.java
這里主要看一下pom.xml文件,內容如下
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>helloworld</groupId>
<artifactId>helloworld</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>helloworld</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
在pom.xml文件中,首先描述了項目的定義,groupId:artifactId:packaging:version這個四元組能夠唯一標記一個項目。我們不僅可以用這個四元組來標記我們的項目,也可以用來標記其它的項目,比如用來描述項目依賴關系。perperties中定義了項目的屬性,也可以在這里定義變量並在其它的地方引用。至於最后的dependencies,則是描述了項目的依賴關系,Maven會根據依賴關系自動下載相應的文件並在編譯時使用。
在大型項目開發中,往往會將其分成若干個子項目,每個子項目都有着自己的的pom.xml,它們與父pom.xml之間相當於繼承的關系。
可以說,pom.xml文件的配置是整個Maven的核心重點,也是學習Maven過程中需要詳細了解的內容。這里只給出了最簡單的配置樣例,詳細了解可以查看官方文檔。
接下來編譯並運行Helloworld項目。
如果是第一次編譯的話,需要聯網,因為Maven會自動下載依賴包。
$ mvn
package
下載的依賴包會保存在~/.m2/repository文件夾中,打開這個文件夾,我們會發現里面的包正是按前面所說的四元組目錄結構進行存儲的。Maven在依賴一個jar包時會先去本地庫查找,如果沒找到就會從網上下載。當然,並不是所有的包都能從網上下載到,比如我們自己開發的jar包,這時,我們就可以用mvn install
命令將一個項目安裝到本地倉庫。
打包成功后我們會發現項目中多了一個target文件夾,目錄結構如下
target/
├── classes
│ └── helloworld
│ └── App.class
├── helloworld-1.0-SNAPSHOT.jar
├── maven-archiver
│ └── pom.properties
├── maven-status
│ └── maven-compiler-plugin
│ ├── compile
│ │ └── default-compile
│ │ ├── createdFiles.lst
│ │ └── inputFiles.lst
│ └── testCompile
│ └── default-testCompile
│ ├── createdFiles.lst
│ └── inputFiles.lst
├── surefire-reports
│ ├── helloworld.AppTest.txt
│ └── TEST-helloworld.AppTest.xml
└── test-classes
└── helloworld
└── AppTest.class
可以看到,在package過程中,maven完成了編譯、測試代碼,生成測試報告,生成jar包等一系列工作。
最后,我們也可以手動運行jar包查看結果。
$ java -
cp target/helloworld-1.0-SNAPSHOT.jar helloworld.App
Hello World!
Maven常用命令
Maven的命令非常多,學習命令首先要了解Maven的生命周期。
Maven首先會驗證並處理引用資源,之后進行項目編譯,如果沒有聲明跳過測試,也會編譯測試代碼並進行測試、以成測試報告。最后,Maven會將編譯好的內容進行打包,用於發布。
Maven命令與Maven的生命周期有着對應的關系,一個命令也經常會包含多個生命周期,比如mvn package
會完成以上所有步驟。
這里列舉幾個常用的命令
mvn compile 編譯項目
mvn test 編譯運行單元測試
mvn package 打包(jar or war)
mvn install 將項目安裝到本地倉庫
mvn clean 清空項目
mvn eclipse:eclipse 生成eclipse工程
吐槽
在用Maven編譯一些Apache項目的時候,實在是想吐槽GFW!!如果不翻牆經常是編譯到一半就有個文件Download不下來了。。
Maven權威指南_中文完整版清晰PDF http://www.linuxidc.com/Linux/2014-06/103690.htm
Maven 3.1.0 發布,項目構建工具 http://www.linuxidc.com/Linux/2013-07/87403.htm
Linux 安裝 Maven http://www.linuxidc.com/Linux/2013-05/84489.htm
Maven3.0 配置和簡單使用 http://www.linuxidc.com/Linux/2013-04/82939.htm
Ubuntu下搭建sun-jdk和Maven2 http://www.linuxidc.com/Linux/2012-12/76531.htm
Maven使用入門 http://www.linuxidc.com/Linux/2012-11/74354.htm