apache Maven,,是一個(gè)軟件(特別是Java軟件)項(xiàng)目管理及自動(dòng)構(gòu)建工具,,由Apache軟件基金會(huì)所提供?;陧?xiàng)目對(duì)象模型(POM)概念,,Maven利用一個(gè)中央信息片斷能管理一個(gè)項(xiàng)目的構(gòu)建、報(bào)告和文檔等步驟,。曾是Jakarta項(xiàng)目的子項(xiàng)目,,現(xiàn)為獨(dú)立Apache項(xiàng)目。 現(xiàn)在有很多Apache項(xiàng)目都已經(jīng)開始采用Maven進(jìn)行管理,。 本篇文章簡(jiǎn)單介紹了Maven的相關(guān)知識(shí),,以及在Linux下的安裝與使用方法。如果需要進(jìn)一步了解Maven,,請(qǐng)移步Maven官網(wǎng),。 http://maven. 安裝MavenMaven的下載地址: http://maven./download.cgi 這里以最新的3.2.3版本為例進(jìn)行安裝,在這之前需要確保機(jī)器上已經(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/maven3 export MAVEN_HOME export PATH=${PATH}:${MAVEN_HOME}/bin 記得執(zhí)行 最后運(yùn)行 mvn -v 驗(yàn)證maven是否安裝成功,,如果安裝成功會(huì)打印如下內(nèi)容 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創(chuàng)建項(xiàng)目無(wú)論是學(xué)習(xí)語(yǔ)言還是框架,先來一個(gè)Hello World基本上已經(jīng)是套路了,,我們也通過構(gòu)建一個(gè)HelloWorld項(xiàng)目來了解如何使用Maven,。首先通過maven創(chuàng)建helloworld項(xiàng)目 $ mvn archetype:create -DgroupId= helloworld -DartifactId=helloworld 生成的項(xiàng)目目錄如下,,其中src/main/java是源碼目錄,src/test/java是測(cè)試文件目錄,。一共只有三個(gè)文件,,打開這三個(gè)文件,可以看到App.java中已經(jīng)寫好了一個(gè)HelloWorld程序,,而AppTest中是Junit單元測(cè)試的代碼,,至于pom.xml,則給出了項(xiàng)目的一些基本信息以及依賴關(guān)系,。 helloworld/ ├── pom.xml └── src ├── main │ └── java │ └── helloworld │ └── App.java └── test └── java └── helloworld └── AppTest.java 這里主要看一下pom.xml文件,,內(nèi)容如下 <project xmlns = "http://maven./POM/4.0.0"xmlns:xsi = "http://www./2001/XMLSchema-instance" xsi:schemaLocation = "http://maven./POM/4.0.0http://maven./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. </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文件中,首先描述了項(xiàng)目的定義,,groupId:artifactId:packaging:version這個(gè)四元組能夠唯一標(biāo)記一個(gè)項(xiàng)目,。我們不僅可以用這個(gè)四元組來標(biāo)記我們的項(xiàng)目,也可以用來標(biāo)記其它的項(xiàng)目,,比如用來描述項(xiàng)目依賴關(guān)系,。perperties中定義了項(xiàng)目的屬性,也可以在這里定義變量并在其它的地方引用,。至于最后的dependencies,,則是描述了項(xiàng)目的依賴關(guān)系,Maven會(huì)根據(jù)依賴關(guān)系自動(dòng)下載相應(yīng)的文件并在編譯時(shí)使用,。 在大型項(xiàng)目開發(fā)中,,往往會(huì)將其分成若干個(gè)子項(xiàng)目,每個(gè)子項(xiàng)目都有著自己的的pom.xml,,它們與父pom.xml之間相當(dāng)于繼承的關(guān)系,。 可以說,pom.xml文件的配置是整個(gè)Maven的核心重點(diǎn),,也是學(xué)習(xí)Maven過程中需要詳細(xì)了解的內(nèi)容,。這里只給出了最簡(jiǎn)單的配置樣例,詳細(xì)了解可以查看官方文檔,。 接下來編譯并運(yùn)行Helloworld項(xiàng)目,。 如果是第一次編譯的話,需要聯(lián)網(wǎng),,因?yàn)镸aven會(huì)自動(dòng)下載依賴包,。 $ mvn package 下載的依賴包會(huì)保存在~/.m2/repository文件夾中,打開這個(gè)文件夾,,我們會(huì)發(fā)現(xiàn)里面的包正是按前面所說的四元組目錄結(jié)構(gòu)進(jìn)行存儲(chǔ)的,。Maven在依賴一個(gè)jar包時(shí)會(huì)先去本地庫(kù)查找,如果沒找到就會(huì)從網(wǎng)上下載。當(dāng)然,,并不是所有的包都能從網(wǎng)上下載到,比如我們自己開發(fā)的jar包,,這時(shí),,我們就可以用 mvn install 命令將一個(gè)項(xiàng)目安裝到本地倉(cāng)庫(kù)。 打包成功后我們會(huì)發(fā)現(xiàn)項(xiàng)目中多了一個(gè)target文件夾,,目錄結(jié)構(gòu)如下 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完成了編譯,、測(cè)試代碼,,生成測(cè)試報(bào)告,生成jar包等一系列工作,。 最后,,我們也可以手動(dòng)運(yùn)行jar包查看結(jié)果。 $ java - cp target/helloworld- 1.0 -SNAPSHOT.jar helloworld.App Hello World! Maven常用命令Maven的命令非常多,,學(xué)習(xí)命令首先要了解Maven的生命周期,。 Maven首先會(huì)驗(yàn)證并處理引用資源,之后進(jìn)行項(xiàng)目編譯,,如果沒有聲明跳過測(cè)試,,也會(huì)編譯測(cè)試代碼并進(jìn)行測(cè)試、以成測(cè)試報(bào)告,。最后,,Maven會(huì)將編譯好的內(nèi)容進(jìn)行打包,用于發(fā)布,。 Maven命令與Maven的生命周期有著對(duì)應(yīng)的關(guān)系,,一個(gè)命令也經(jīng)常會(huì)包含多個(gè)生命周期,比如 mvnpackage 會(huì)完成以上所有步驟,。 這里列舉幾個(gè)常用的命令
|
|