Maven簡介
Maven是一個強大的Java項目構(gòu)建工具。由于Maven是用Java開發(fā)的茴肥,因此Maven被更多的用于Java項目中肢娘。
構(gòu)建工具是將軟件項目構(gòu)建相關(guān)的過程自動化的工具。構(gòu)建一個軟件項目通常包含以下一個或多個過程:
生成源碼(如果項目使用自動生成源碼)塌碌;
從源碼生成項目文檔渊胸;
編譯源碼;
將編譯后的代碼打包成JAR文件或者ZIP文件台妆;
將打包好的代碼安裝到服務(wù)器翎猛、倉庫或者其它的地方;
Maven 使用約定而不是配置接剩,意味著開發(fā)者不需要再自己創(chuàng)建構(gòu)建過程切厘。
開發(fā)者不需要再關(guān)心每一個配置細節(jié)。Maven 為工程提供了合理的默認(rèn)行為懊缺。當(dāng)創(chuàng)建 Maven 工程時疫稿,Maven 會創(chuàng)建默認(rèn)的工程結(jié)構(gòu)。開發(fā)者只需要合理的放置文件鹃两,而在 pom.xml 中不再需要定義任何配置遗座。項目對象模型(POM): POM 是 Maven 2 中的里程碑式的模型。該模型的一部分已經(jīng)構(gòu)建到 Maven 引擎(被親切地稱為反應(yīng)堆 )中俊扳,其余部分則通過一個名叫 pom.xml 的基于 XML 的元數(shù)據(jù)文件來聲明途蒋。
依賴項管理模型: Maven 對如何管理項目的依賴項很在行。依賴項管理是一片灰色地帶馋记,典型的構(gòu)建-管理工具和系統(tǒng)都未明確涉及号坡。Maven 2 構(gòu)建了 Maven 依賴項管理模型懊烤,該模型能夠適應(yīng)大多數(shù)需求。這個模型被證明是有效而高產(chǎn)的模型筋帖,目前奸晴,主要的開源項目都部署了該模型。
-
構(gòu)建生命周期和階段:和 POM 相關(guān)的概念是構(gòu)建生命周期 和階段日麸。這是 Maven 2 的內(nèi)嵌概念模型和現(xiàn)實物理世界之間的接口寄啼。使用 Maven 時,工作主要是通過插件來執(zhí)行的代箭。在構(gòu)建周期中墩划,Maven 2 通過遵循一系列定義好的階段,將這些插件協(xié)調(diào)起來嗡综。
下面的表格展示了工程源碼文件乙帮、資源文件的默認(rèn)配置,和其他一些配置极景。假定 ${basedir} 表示工程目錄:| 配置項 | 默認(rèn)值 |
| ------------- |:-------------:|
| resources | ${basedir}/src/main/resources |
| Tests | ${basedir}/src/test |
| Complied byte code | ${basedir}/target |
| distributable JAR | ${basedir}/target/classes |
為了構(gòu)建工程察净,Maven 為開發(fā)者提供了選項來配置生命周期目標(biāo)和工程依賴(依賴于 Maven 的插件擴展功能和默認(rèn)的約定)。大部分的工程管理和構(gòu)建相關(guān)的任務(wù)是由 Maven 插件完成的盼樟。
開發(fā)人員不需要了解每個插件是如何工作的氢卡,就能夠構(gòu)建任何給定的 Maven 工程。
Maven - 環(huán)境配置
Maven 是一個基于 Java 的工具晨缴,所以要做的第一件事情就是安裝 JDK译秦。
系統(tǒng)要求
項目 | 要求 |
---|---|
JDK | Maven 3.3 要求 JDK 1.7 或以上 Maven 3.2 要求 JDK 1.6 或以上 Maven 3.0/3.1 要求 JDK 1.5 或以上 |
內(nèi)存 | 沒有最低要求 |
磁盤 | Maven 自身安裝需要大約 10 MB 空間。 除此之外击碗,額外的磁盤空間將用于你的本地 Maven 倉庫筑悴。 你本地倉庫的大小取決于使用情況,但預(yù)期至少 500 MB稍途。 |
操作系統(tǒng) | 沒有最低要求 |
步驟 1:檢查 Java 安裝
操作系統(tǒng) | 任務(wù) | 命令 |
---|---|---|
Windows | 打開命令控制臺 | c:> java -version |
Linux | 打開命令終端 | $ java -version |
Mac | 打開終端 | machine:~ joseph$ java -version |
現(xiàn)在打開控制臺阁吝,執(zhí)行下面的 java 命令。
操作系統(tǒng) | 任務(wù) | 命令 |
---|---|---|
Windows | 打開命令控制臺 | c:> java -version |
Linux | 打開命令終端 | $ java -version |
Mac | 打開終端 | machine:~ joseph$ java -version |
操作系統(tǒng) | 輸出 |
---|---|
Windows | java version "1.6.0_21" Java(TM) SE Runtime Environment (build 1.6.0_21-b07) Java HotSpot(TM) Client VM (build 17.0-b17, mixed mode, sharing) |
Linux | java version "1.6.0_21" Java(TM) SE Runtime Environment (build 1.6.0_21-b07) Java HotSpot(TM) Client VM (build 17.0-b17, mixed mode, sharing) |
Mac | java version "1.6.0_21" Java(TM) SE Runtime Environment (build 1.6.0_21-b07) Java HotSpot(TM) Client VM (build 17.0-b17, mixed mode, sharing) |
步驟 2:設(shè)置 Java 環(huán)境
步驟 3:下載 Maven 文件
從以下網(wǎng)址下載 Maven 3.2.5:http://maven.apache.org/download.html
步驟 4:解壓 Maven 文件
操作系統(tǒng) | 位置 (根據(jù)你的安裝位置而定) |
---|---|
Windows | C:\Program Files\Apache Software Foundation\apache-maven-3.2.5 |
Linux | /usr/local/apache-maven |
Mac | /usr/local/apache-maven |
解壓文件到你想要的位置來安裝 Maven 3.2.5械拍,你會得到 apache-maven-3.2.5 子目錄求摇。
操作系統(tǒng) | 位置 (根據(jù)你的安裝位置而定) |
---|---|
Windows | C:\Program Files\Apache Software Foundation\apache-maven-3.2.5 |
Linux | /usr/local/apache-maven |
Mac | /usr/local/apache-maven |
步驟 5:設(shè)置 Maven 環(huán)境變量
操作系統(tǒng) | 輸出 |
---|---|
Windows | 使用系統(tǒng)屬性設(shè)置環(huán)境變量。 M2_HOME=C:\Program Files\Apache Software Foundation\apache-maven-3.2.5 M2=%M2_HOME%\bin MAVEN_OPTS=-Xms256m -Xmx512m |
Linux | 打開命令終端設(shè)置環(huán)境變量殊者。 export M2_HOME=/usr/local/apache-maven/apache-maven-3.2.5 export M2=$M2_HOME/bin export MAVEN_OPTS=-Xms256m -Xmx512m |
Mac | 打開命令終端設(shè)置環(huán)境變量。 export M2_HOME=/usr/local/apache-maven/apache-maven-3.2.5 export M2=$M2_HOME/bin export MAVEN_OPTS=-Xms256m -Xmx512m |
添加 M2_HOME验夯、M2猖吴、MAVEN_OPTS 到環(huán)境變量中。
操作系統(tǒng) | 輸出 |
---|---|
Windows | 使用系統(tǒng)屬性設(shè)置環(huán)境變量挥转。 M2_HOME=C:\Program Files\Apache Software Foundation\apache-maven-3.2.5 M2=%M2_HOME%\bin MAVEN_OPTS=-Xms256m -Xmx512m |
Linux | 打開命令終端設(shè)置環(huán)境變量海蔽。 export M2_HOME=/usr/local/apache-maven/apache-maven-3.2.5 export M2=$M2_HOME/bin export MAVEN_OPTS=-Xms256m -Xmx512m |
Mac | 打開命令終端設(shè)置環(huán)境變量共屈。 export M2_HOME=/usr/local/apache-maven/apache-maven-3.2.5 export M2=$M2_HOME/bin export MAVEN_OPTS=-Xms256m -Xmx512m |
步驟 6:添加 Maven bin 目錄到系統(tǒng)路徑中
操作系統(tǒng) | 輸出 |
---|---|
Windows | 添加字符串 “;%M2%” 到系統(tǒng)“Path”變量末尾 |
Linux | export PATH=M2:PATH |
Mac | export PATH=M2:PATH |
步驟 7:驗證 Maven 安裝
操作系統(tǒng) | 輸出 | 命令 |
---|---|---|
Windows | 打開命令控制臺 | c:> mvn --version |
Linux | 打開命令終端 | $ mvn --version |
Mac | 打開終端 | machine:~ joseph$ mvn --version |
現(xiàn)在打開控制臺,執(zhí)行以下 mvn 命令党窜。
操作系統(tǒng) | 輸出 | 命令 |
---|---|---|
Windows | 打開命令控制臺 | c:> mvn --version |
Linux | 打開命令終端 | $ mvn --version |
Mac | 打開終端 | machine:~ joseph$ mvn --version |
Maven - POM
Maven的中心思想是POM文件(項目對象模型)拗引。POM文件是以XML文件的形式表述項目的資源,如源碼幌衣、測試代碼矾削、依賴(用到的外部Jar包)等。POM文件應(yīng)該位于項目的根目錄下豁护。POM 包含了關(guān)于工程和各種配置細節(jié)的信息哼凯,Maven 使用這些信息構(gòu)建工程。
POM文件描述的是構(gòu)建“什么”楚里,而不是“如何”構(gòu)建断部。如何構(gòu)建是取決于Maven的構(gòu)建階段和目標(biāo)。
每一個項目都有一個POM文件班缎。POM文件即pom.xml蝴光,應(yīng)該放在項目的根目錄下。一個項目如果分為多個子項目达址,一般來講蔑祟,父項目有一個POM文件,每一個子項目都有一個POM文件苏携。在這種結(jié)構(gòu)下做瞪,既可以一步構(gòu)建整個項目,也可以各個子項目分開構(gòu)建右冻。
下圖說明了Maven是如何使用POM文件的装蓬,以及POM文件的主要組成部分:
POM 也包含了目標(biāo)和插件。當(dāng)執(zhí)行一個任務(wù)或者目標(biāo)時纱扭,Maven 會查找當(dāng)前目錄下的 POM牍帚,從其中讀取所需要的配置信息,然后執(zhí)行目標(biāo)乳蛾。能夠在 POM 中設(shè)置的一些配置如下:
- project dependencies
- plugins
- goals
- build profiles
- project version
- developers
在創(chuàng)建 POM 之前暗赶,我們首先確定工程組(groupId),及其名稱(artifactId)和版本肃叶,在倉庫中這些屬性是工程的唯一標(biāo)識蹂随。
POM 舉例
<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>com.companyname.project-group</groupId>
<artifactId>project</artifactId>
<version>1.0</version>
</project>
需要說明的是每個工程應(yīng)該只有一個 POM 文件。
- 所有的 POM 文件需要 project 元素和三個必須的字段:groupId, artifactId,version因惭。
- 在倉庫中的工程標(biāo)識為 groupId:artifactId:version
- POM.xml 的根元素是 project岳锁,它有三個主要的子節(jié)點:
節(jié)點 | 描述 |
---|---|
groupId | 這是工程組的標(biāo)識。它在一個組織或者項目中通常是唯一的蹦魔。例如激率,一個銀行組織 com.company.bank 擁有所有的和銀行相關(guān)的項目咳燕。 |
artifactId | 這是工程的標(biāo)識。它通常是工程的名稱乒躺。例如招盲,消費者銀行。groupId 和 artifactId 一起定義了 artifact 在倉庫中的位置嘉冒。 |
version | 這是工程的版本號曹货。在 artifact 的倉庫中,它用來區(qū)分不同的版本健爬。例如:com.company.bank:consumer-banking:1.0 com.company.bank:consumer-banking:1.1. |
Super POM
所有的Maven pom文件都繼承自一個父pom控乾。如果沒有指定父pom,則該pom文件繼承自根pom娜遵。pom文件的繼承關(guān)系如下圖所示:
可以讓一個pom文件顯式地繼承另一個pom文件蜕衡。這樣,可以通過修改公共父pom文件的設(shè)置來修改所有子pom文件的設(shè)置设拟。在pom文件的起始處指定父pom慨仿,例如:
<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>
<parent>
<groupId>org.codehaus.mojo</groupId>
<artifactId>my-parent</artifactId>
<version>2.0</version>
<relativePath>../my-parent</relativePath>
</parent>
<artifactId>my-project</artifactId>
…
</project>