Linux下Maven的安裝與使用


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
2
3
$ 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中添加以下幾行

1
2
3
MAVEN_HOME=/usr/local/maven3
export MAVEN_HOME
export PATH=${PATH}:${MAVEN_HOME}/bin

記得執行source /etc/profile使環境變量生效。

最后運行mvn -v驗證maven是否安裝成功,如果安裝成功會打印如下內容

1
2
3
4
5
6
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項目

1
$ mvn archetype:create -DgroupId=helloworld -DartifactId=helloworld

生成的項目目錄如下,其中src/main/java是源碼目錄,src/test/java是測試文件目錄。
一共只有三個文件,打開這三個文件,可以看到App.java中已經寫好了一個Hello World程序,而AppTest中是Junit單元測試的代碼,至於pom.xml,則給出了項目的一些基本信息以及依賴關系。

1
2
3
4
5
6
7
8
9
10
11
helloworld/
├── pom.xml
└── src
├── main
│   └── java
│   └── helloworld
│   └── App.java
└── test
└── java
└── helloworld
└── AppTest.java

這里主要看一下pom.xml文件,內容如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<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>

大專欄  Linux下Maven的安裝與使用 <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會自動下載依賴包。

1
$ mvn package

下載的依賴包會保存在~/.m2/repository文件夾中,打開這個文件夾,我們會發現里面的包正是按前面所說的四元組目錄結構進行存儲的。Maven在依賴一個jar包時會先去本地庫查找,如果沒找到就會從網上下載。當然,並不是所有的包都能從網上下載到,比如我們自己開發的jar包,這時,我們就可以用mvn install命令將一個項目安裝到本地倉庫。

打包成功后我們會發現項目中多了一個target文件夾,目錄結構如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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包查看結果。

1
2
$ java -cp target/helloworld-1.0-SNAPSHOT.jar helloworld.App
Hello World!

Maven常用命令

Maven的命令非常多,學習命令首先要了解Maven的生命周期。

Maven首先會驗證並處理引用資源,之后進行項目編譯,如果沒有聲明跳過測試,也會編譯測試代碼並進行測試、以成測試報告。最后,Maven會將編譯好的內容進行打包,用於發布。

Maven命令與Maven的生命周期有着對應的關系,一個命令也經常會包含多個生命周期,比如mvn package會完成以上所有步驟。

這里列舉幾個常用的命令

1
2
3
4
5
6
mvn compile     編譯項目
mvn test 編譯運行單元測試
mvn package 打包(jar or war)
mvn install 將項目安裝到本地倉庫
mvn clean 清空項目
mvn eclipse:eclipse 生成eclipse工程

吐槽

在用Maven編譯一些Apache項目的時候,實在是想吐槽GFW!!如果不翻牆經常是編譯到一半就有個文件Download不下來了。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM