Maven學習初級入門

Maven官方網站

Apache Maven是一個軟件項目管理和綜合工具。基于項目對象模型(POM)的概念,Maven可以從一個中心資料片管理項目構建,報告和文件。

您曾經是否會遇到這些問題:
1.我們要開發一個 Java 項目,為了保證編譯通過,我們會到處去尋找 jar 包。當編譯通過了,在運行的時候,卻發現 ClassNotFoundException,臥槽!還差 jar 包啊?再去找找吧。
2.每個 Java 項目的目錄結構都沒有一個統一的標準,配置文件到處都是,單元測試代碼到底應該放在哪里,沒有一個權威的規范。
3.可使用 Ant 做為項目構建工具,它可以自動化地完成編譯、測試、打包等任務,確實為我們省了不少事兒,但編寫 Ant 的 XML 腳本絕非是一件輕松的事情。
有了 Maven,以上這一切都不再是問題了。
看來Maven 要做的是兩件事情:

1.統一開發規范與工具;
2.統一管理 jar 包。
一、使用前提

1.下載連接 http://maven.apache.org/download.cgi
2.配置環境變量
M2_HOME = maven根路徑

maven根路徑

PATH = maven根路徑/bin

maven根路徑/bin

3.配置好之后,我們就可以執行maven命令了
mvn -v 顯示maven版本信息

maven版本信息
二、了解 Maven 倉庫

使用 Maven 給我們帶來的最直接的幫助,就是 jar 包得到了統一管理,那么這些 jar 包存放在哪里呢?它們就在您的本地倉庫中,位于 C:\Users\用戶名.m2 目錄下(當然也可以修改這個默認地址)。
實際上可將本地倉庫理解“緩存”,因為項目首先會從本地倉庫中獲取 jar 包,當無法獲取指定 jar 包的時候,本地倉庫會從 遠程倉庫(或 中央倉庫)中下載 jar 包,并放入本地倉庫中以備將來使用。這個遠程倉庫是 Maven 官方提供的,可通過 http://search.maven.org/ 來訪問。這樣一來,本地倉庫會隨著項目的積累越來越大。通過下面這張圖可以清晰地表達項目、本地倉庫、遠程倉庫之間的關系。

圖解本地倉庫與中央倉庫

maven查找依賴的順序

1.從本地倉庫中查找所需要的依賴
2.從私有倉庫中查找所需要的依賴
3.從中央倉庫(http://repo.maven.apache.org/)中查找所需要的依賴

maven查找依賴的順序
三、理解 pom.xml

pom.xml 稱為 Project Object Model(項目對象模型),它用于描述整個 Maven 項目,所以也稱為 Maven 描述文件。

<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/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <groupId>com.smart</groupId>
    <artifactId>smart-demo</artifactId>
    <version>1.0</version>
    <packaging>war</packaging>

    <name>smart-demo Maven Webapp</name>
    <url>http://maven.apache.org</url>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <finalName>smart-demo</finalName>
    </build></project>

從上往下簡要說明:

modelVersion:這個是 POM 的版本號,現在都是 4.0.0 的,必須得有,但不需要修改。

groupId、artifactId、version:分別表示 Maven 項目的組織名、構件名、版本號,它們三個合起來就是 Maven **坐標,根據這個坐標可以在 Maven 倉庫中對應唯一的 **Maven 構件。

packaging:表示該項目的打包方式,war 表示打包為 war 文件,默認為 jar,表示打包為 jar 文件。

name、url:表示該項目的名稱與 URL 地址,意義不大,可以省略。

dependencies:定義該項目的依賴關系,其中每一個 dependency 對應一個 Maven 項目,可見 Maven 坐標再次出現,還多了一個 scope,表示作用域(下面會描述)。

build:表示與構建相關的配置,這里的 finalName 表示最終構建后的名稱 smart-demo.war,這里的 finalName 還可以使用另一種方式來定義。

除了項目的基本信息(Maven 坐標、打包方式等)以外,每個 pom.xml 都應該包括:

Lifecycle(生命周期)

Plugins(插件)

Dependencies(依賴)

Lifecycle 是項目構建的生命周期,它包括 9 個 Phase(階段)。

大家知道,Maven 是一個核心加上多個插件的架構,而這些插件提供了一系列非常重要的功能,這些插件會在許多階段里發揮重要作用。
階段插件作用:
clean
clean 清理自動生成的文件,也就是 target 目錄
validate
由 Maven 核心負責 驗證 Maven 描述文件是否有效
compile
compile 編譯后產生target目錄,里面存放的就是編譯后的字節碼文件
test
compiler、surefire、resources 運行測試代碼
package
war 項目打包,就是生成構件包,也就是打 war 包
verify
由 Maven 核心負責,驗證構件包是否有效
install
install 將構件包安裝到本地倉庫
site
site 生成項目站點,就是一堆靜態網頁文件,包括 JavaDoc
deploy
deploy 將構件包部署到遠程倉庫

四、使用 Maven 命令

可使用兩種不同的方式來執行 Maven 命令:

方式一:mvn <插件>:<目標> [參數]

方式二:mvn <階段>

現在我們接觸到的都是第一種方式,而第二種方式才是我們日常中使用最頻繁的,例如:

mvn clean:清空輸出目錄(即 target 目錄)

mvn compile:編譯源代碼

mvn package:生成構件包(一般為 jar 包或 war 包)

mvn install:將構件包安裝到本地倉庫

mvn deploy:將構件包部署到遠程倉庫

執行 Maven 命令需要注意的是:必須在 Maven 項目的根目錄處執行,也就是當前目錄下一定存在一個名為 pom.xml 的文件。

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

推薦閱讀更多精彩內容

  • |-1-更新內容[6.從倉庫解析依賴的機制(重要)] 1Maven倉庫作用 倉庫用來存儲所有項目使用到構件,在ma...
    zlcook閱讀 6,100評論 0 25
  • 當前,JVM生態圈主要的三大構建工具: Apache Ant(帶著Ivy) Maven Gradle 對于剛開始接...
    清楓_小天閱讀 5,819評論 1 13
  • Spring Boot 參考指南 介紹 轉載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,922評論 6 342
  • Maven簡單介紹 Maven是一個項目管理工具。強大,但是很容易使用。 它包含了: 一個項目對象模型 (Proj...
    高公子Daniel閱讀 4,263評論 4 60
  • 文/雍萬萍 童年 似一場夢 嫩芽初上枝頭 花蝴蝶卻不經意 斷翅在 貧窮的歲月中 青春 是一場夢 相戀剛剛開始 風景...
    頻彩閱讀 482評論 7 15