Maven - 簡介

Maven簡介

Maven是一個強大的Java項目構建工具。由于Maven是用Java開發的,因此Maven被更多的用于Java項目中。
構建工具是將軟件項目構建相關的過程自動化的工具。構建一個軟件項目通常包含以下一個或多個過程:

  • 生成源碼(如果項目使用自動生成源碼);

  • 從源碼生成項目文檔;

  • 編譯源碼;

  • 將編譯后的代碼打包成JAR文件或者ZIP文件;

  • 將打包好的代碼安裝到服務器、倉庫或者其它的地方;
    Maven 使用約定而不是配置,意味著開發者不需要再自己創建構建過程。
    開發者不需要再關心每一個配置細節。Maven 為工程提供了合理的默認行為。當創建 Maven 工程時,Maven 會創建默認的工程結構。開發者只需要合理的放置文件,而在 pom.xml 中不再需要定義任何配置。

  • 項目對象模型(POM): POM 是 Maven 2 中的里程碑式的模型。該模型的一部分已經構建到 Maven 引擎(被親切地稱為反應堆 )中,其余部分則通過一個名叫 pom.xml 的基于 XML 的元數據文件來聲明。

  • 依賴項管理模型: Maven 對如何管理項目的依賴項很在行。依賴項管理是一片灰色地帶,典型的構建-管理工具和系統都未明確涉及。Maven 2 構建了 Maven 依賴項管理模型,該模型能夠適應大多數需求。這個模型被證明是有效而高產的模型,目前,主要的開源項目都部署了該模型。

  • 構建生命周期和階段:和 POM 相關的概念是構建生命周期 和階段。這是 Maven 2 的內嵌概念模型和現實物理世界之間的接口。使用 Maven 時,工作主要是通過插件來執行的。在構建周期中,Maven 2 通過遵循一系列定義好的階段,將這些插件協調起來。
    下面的表格展示了工程源碼文件、資源文件的默認配置,和其他一些配置。假定 ${basedir} 表示工程目錄:

    | 配置項 | 默認值 |
    | ------------- |:-------------:|
    | resources | ${basedir}/src/main/resources |
    | Tests | ${basedir}/src/test |
    | Complied byte code | ${basedir}/target |
    | distributable JAR | ${basedir}/target/classes |
    為了構建工程,Maven 為開發者提供了選項來配置生命周期目標和工程依賴(依賴于 Maven 的插件擴展功能和默認的約定)。大部分的工程管理和構建相關的任務是由 Maven 插件完成的。
    開發人員不需要了解每個插件是如何工作的,就能夠構建任何給定的 Maven 工程。

Maven - 環境配置

Maven 是一個基于 Java 的工具,所以要做的第一件事情就是安裝 JDK。

系統要求

項目 要求
JDK Maven 3.3 要求 JDK 1.7 或以上
Maven 3.2 要求 JDK 1.6 或以上
Maven 3.0/3.1 要求 JDK 1.5 或以上
內存 沒有最低要求
磁盤 Maven 自身安裝需要大約 10 MB 空間。
除此之外,額外的磁盤空間將用于你的本地 Maven 倉庫。
你本地倉庫的大小取決于使用情況,但預期至少 500 MB。
操作系統 沒有最低要求

步驟 1:檢查 Java 安裝

操作系統 任務 命令
Windows 打開命令控制臺 c:> java -version
Linux 打開命令終端 $ java -version
Mac 打開終端 machine:~ joseph$ java -version

現在打開控制臺,執行下面的 java 命令。

操作系統 任務 命令
Windows 打開命令控制臺 c:> java -version
Linux 打開命令終端 $ java -version
Mac 打開終端 machine:~ joseph$ java -version
操作系統 輸出
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:設置 Java 環境

步驟 3:下載 Maven 文件

從以下網址下載 Maven 3.2.5:http://maven.apache.org/download.html

步驟 4:解壓 Maven 文件

操作系統 位置 (根據你的安裝位置而定)
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 子目錄。

操作系統 位置 (根據你的安裝位置而定)
Windows C:\Program Files\Apache Software Foundation\apache-maven-3.2.5
Linux /usr/local/apache-maven
Mac /usr/local/apache-maven

步驟 5:設置 Maven 環境變量

操作系統 輸出
Windows 使用系統屬性設置環境變量。
M2_HOME=C:\Program Files\Apache Software Foundation\apache-maven-3.2.5
M2=%M2_HOME%\bin
MAVEN_OPTS=-Xms256m -Xmx512m
Linux 打開命令終端設置環境變量。
export M2_HOME=/usr/local/apache-maven/apache-maven-3.2.5
export M2=$M2_HOME/bin
export MAVEN_OPTS=-Xms256m -Xmx512m
Mac 打開命令終端設置環境變量。
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 到環境變量中。

操作系統 輸出
Windows 使用系統屬性設置環境變量。
M2_HOME=C:\Program Files\Apache Software Foundation\apache-maven-3.2.5
M2=%M2_HOME%\bin
MAVEN_OPTS=-Xms256m -Xmx512m
Linux 打開命令終端設置環境變量。
export M2_HOME=/usr/local/apache-maven/apache-maven-3.2.5
export M2=$M2_HOME/bin
export MAVEN_OPTS=-Xms256m -Xmx512m
Mac 打開命令終端設置環境變量。
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 目錄到系統路徑中

操作系統 輸出
Windows 添加字符串 “;%M2%” 到系統“Path”變量末尾
Linux export PATH=M2:PATH
Mac export PATH=M2:PATH

步驟 7:驗證 Maven 安裝

操作系統 輸出 命令
Windows 打開命令控制臺 c:> mvn --version
Linux 打開命令終端 $ mvn --version
Mac 打開終端 machine:~ joseph$ mvn --version

現在打開控制臺,執行以下 mvn 命令。

操作系統 輸出 命令
Windows 打開命令控制臺 c:> mvn --version
Linux 打開命令終端 $ mvn --version
Mac 打開終端 machine:~ joseph$ mvn --version

Maven - POM

Maven的中心思想是POM文件(項目對象模型)。POM文件是以XML文件的形式表述項目的資源,如源碼、測試代碼、依賴(用到的外部Jar包)等。POM文件應該位于項目的根目錄下。POM 包含了關于工程和各種配置細節的信息,Maven 使用這些信息構建工程。
POM文件描述的是構建“什么”,而不是“如何”構建。如何構建是取決于Maven的構建階段和目標。
每一個項目都有一個POM文件。POM文件即pom.xml,應該放在項目的根目錄下。一個項目如果分為多個子項目,一般來講,父項目有一個POM文件,每一個子項目都有一個POM文件。在這種結構下,既可以一步構建整個項目,也可以各個子項目分開構建。
下圖說明了Maven是如何使用POM文件的,以及POM文件的主要組成部分:

image.png

POM 也包含了目標和插件。當執行一個任務或者目標時,Maven 會查找當前目錄下的 POM,從其中讀取所需要的配置信息,然后執行目標。能夠在 POM 中設置的一些配置如下:

  • project dependencies
  • plugins
  • goals
  • build profiles
  • project version
  • developers
    在創建 POM 之前,我們首先確定工程組(groupId),及其名稱(artifactId)和版本,在倉庫中這些屬性是工程的唯一標識。

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>

需要說明的是每個工程應該只有一個 POM 文件。

  • 所有的 POM 文件需要 project 元素和三個必須的字段:groupId, artifactId,version。
  • 在倉庫中的工程標識為 groupId:artifactId:version
  • POM.xml 的根元素是 project,它有三個主要的子節點:
節點 描述
groupId 這是工程組的標識。它在一個組織或者項目中通常是唯一的。例如,一個銀行組織 com.company.bank 擁有所有的和銀行相關的項目。
artifactId 這是工程的標識。它通常是工程的名稱。例如,消費者銀行。groupId 和 artifactId 一起定義了 artifact 在倉庫中的位置。
version 這是工程的版本號。在 artifact 的倉庫中,它用來區分不同的版本。例如:com.company.bank:consumer-banking:1.0
com.company.bank:consumer-banking:1.1.

Super POM

所有的Maven pom文件都繼承自一個父pom。如果沒有指定父pom,則該pom文件繼承自根pom。pom文件的繼承關系如下圖所示:

image.png

可以讓一個pom文件顯式地繼承另一個pom文件。這樣,可以通過修改公共父pom文件的設置來修改所有子pom文件的設置。在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>

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,786評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,656評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,697評論 0 379
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,098評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,855評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,254評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,322評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,473評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,014評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,833評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,016評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,568評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,273評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,680評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,946評論 1 288
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,730評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,006評論 2 374

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,787評論 18 139
  • Spring Boot 參考指南 介紹 轉載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,899評論 6 342
  • 前言什么是 POMQuick Overview POM 常用元素 pom.xml 完整注釋 參考 0 前言 什么是...
    阿父閱讀 12,639評論 1 36
  • Maven入門教程 1.1.介紹、環境配置 1.1.1.Maven介紹 Maven是一個采用純Java編寫的開源項...
    安易學車閱讀 1,465評論 2 10
  • 一級標題 二級標題 *傾斜文字**加粗文字-列表第一項-列表第二項
    兔小白在江湖閱讀 100評論 0 0