apache Maven,是一個(gè)軟件(特別是Java軟件)項目管理及自動(dòng)構建工具,由Apache軟件基金會(huì )所提供?;陧椖繉ο竽P停≒OM)概念,Maven利用一個(gè)中央信息片斷能管理一個(gè)項目的構建、報告和文檔等步驟。曾是Jakarta項目的子項目,現為獨立Apache項目。
現在有很多Apache項目都已經(jīng)開(kāi)始采用Maven進(jìn)行管理。
本篇文章簡(jiǎn)單介紹了Maven的相關(guān)知識,以及在Linux下的安裝與使用方法。如果需要進(jìn)一步了解Maven,請移步Maven官網(wǎng)。 http://maven.apache.org
Maven的下載地址: http://maven.apache.org/download.cgi
這里以最新的3.2.3版本為例進(jìn)行安裝,在這之前需要確保機器上已經(jīng)安裝了JDK。
首先下載Maven并解壓,并移動(dòng)到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
修改環(huán)境變量,在/etc/profile中添加以下幾行
MAVEN_HOME=/usr/local/maven3export MAVEN_HOMEexport PATH=${PATH}:${MAVEN_HOME}/bin
記得執行 source /etc/profile 使環(huán)境變量生效。
最后運行 mvn -v 驗證maven是否安裝成功,如果安裝成功會(huì )打印如下內容
Apache Maven 3.2.3 (33f8c3e1027c3ddde99d3cdebad2656a31e8fdf4;2014-08-12T04:58:10+08:00)Maven home: /usr/local/maven3Java version: 1.7.0_65, vendor:Oracle CorporationJava home: /usr/lib/jvm/java-7-openjdk-amd64/jreDefault locale: en_US, platform encoding: UTF-8OS name: "linux", version: "3.13.0-35-generic", arch: "amd64",family: "unix"
無(wú)論是學(xué)習語(yǔ)言還是框架,先來(lái)一個(gè)Hello World基本上已經(jīng)是套路了,我們也通過(guò)構建一個(gè)HelloWorld項目來(lái)了解如何使用Maven。首先通過(guò)maven創(chuàng )建helloworld項目
$ mvn archetype:create -DgroupId= helloworld -DartifactId=helloworld
生成的項目目錄如下,其中src/main/java是源碼目錄,src/test/java是測試文件目錄。一共只有三個(gè)文件,打開(kāi)這三個(gè)文件,可以看到App.java中已經(jīng)寫(xiě)好了一個(gè)HelloWorld程序,而AppTest中是Junit單元測試的代碼,至于pom.xml,則給出了項目的一些基本信息以及依賴(lài)關(guān)系。
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.0http://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這個(gè)四元組能夠唯一標記一個(gè)項目。我們不僅可以用這個(gè)四元組來(lái)標記我們的項目,也可以用來(lái)標記其它的項目,比如用來(lái)描述項目依賴(lài)關(guān)系。perperties中定義了項目的屬性,也可以在這里定義變量并在其它的地方引用。至于最后的dependencies,則是描述了項目的依賴(lài)關(guān)系,Maven會(huì )根據依賴(lài)關(guān)系自動(dòng)下載相應的文件并在編譯時(shí)使用。
在大型項目開(kāi)發(fā)中,往往會(huì )將其分成若干個(gè)子項目,每個(gè)子項目都有著(zhù)自己的的pom.xml,它們與父pom.xml之間相當于繼承的關(guān)系。
可以說(shuō),pom.xml文件的配置是整個(gè)Maven的核心重點(diǎn),也是學(xué)習Maven過(guò)程中需要詳細了解的內容。這里只給出了最簡(jiǎn)單的配置樣例,詳細了解可以查看官方文檔。
接下來(lái)編譯并運行Helloworld項目。
如果是第一次編譯的話(huà),需要聯(lián)網(wǎng),因為Maven會(huì )自動(dòng)下載依賴(lài)包。
$ mvn package
下載的依賴(lài)包會(huì )保存在~/.m2/repository文件夾中,打開(kāi)這個(gè)文件夾,我們會(huì )發(fā)現里面的包正是按前面所說(shuō)的四元組目錄結構進(jìn)行存儲的。Maven在依賴(lài)一個(gè)jar包時(shí)會(huì )先去本地庫查找,如果沒(méi)找到就會(huì )從網(wǎng)上下載。當然,并不是所有的包都能從網(wǎng)上下載到,比如我們自己開(kāi)發(fā)的jar包,這時(shí),我們就可以用 mvn install 命令將一個(gè)項目安裝到本地倉庫。 打包成功后我們會(huì )發(fā)現項目中多了一個(gè)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過(guò)程中,maven完成了編譯、測試代碼,生成測試報告,生成jar包等一系列工作。
最后,我們也可以手動(dòng)運行jar包查看結果。
$ java - cp target/helloworld- 1.0 -SNAPSHOT.jar helloworld.AppHello World!
Maven的命令非常多,學(xué)習命令首先要了解Maven的生命周期。
Maven首先會(huì )驗證并處理引用資源,之后進(jìn)行項目編譯,如果沒(méi)有聲明跳過(guò)測試,也會(huì )編譯測試代碼并進(jìn)行測試、以成測試報告。最后,Maven會(huì )將編譯好的內容進(jìn)行打包,用于發(fā)布。 Maven命令與Maven的生命周期有著(zhù)對應的關(guān)系,一個(gè)命令也經(jīng)常會(huì )包含多個(gè)生命周期,比如 mvnpackage 會(huì )完成以上所有步驟。
這里列舉幾個(gè)常用的命令
聯(lián)系客服