第3章 Maven 常用命令

我們可以在cmd 中通過一系列的 maven 命令來對我們的 maven-helloworld 工程進行編譯眶痰、測試何暇、運行、打包凛驮、安裝裆站、部署。

3.1.1 compile

compile 是 maven 工程的編譯命令黔夭,作用是將 src/main/java 下的文件編譯為class 文件輸出到 target目錄下宏胯。
cmd 進入命令狀態(tài),執(zhí)行mvn compile本姥,如下圖提示成功:

查看 target 目錄肩袍,class 文件已生成,編譯完成婚惫。

3.1.2 test

test 是 maven 工程的測試命令 mvn test氛赐,會執(zhí)行src/test/java下的單元測試類魂爪。
cmd 執(zhí)行 mvn test 執(zhí)行 src/test/java 下單元測試類,下圖為測試結果艰管,運行 1 個測試用例滓侍,全部成功。

3.1.3 clean

clean 是 maven 工程的清理命令牲芋,執(zhí)行 clean 會刪除 target 目錄及內容撩笆。

3.1.4 package

package 是 maven 工程的打包命令,對于 java 工程執(zhí)行 package 打成 jar 包缸浦,對于web 工程打成war包夕冲。

3.1.5 install

install 是 maven 工程的安裝命令,執(zhí)行 install 將 maven 打成 jar 包或 war 包發(fā)布到本地倉庫裂逐。
從運行結果中歹鱼,可以看出:
當后面的命令執(zhí)行時,前面的操作過程也都會自動執(zhí)行卜高,

3.1.6 Maven 指令的生命周期

maven 對項目構建過程分為三套相互獨立的生命周期弥姻,請注意這里說的是“三套”,而且“相互獨立”篙悯,
這三套生命周期分別是:

  • Clean Lifecycle 在進行真正的構建之前進行一些清理工作蚁阳。
  • Default Lifecycle 構建的核心部分铃绒,編譯鸽照,測試,打包颠悬,部署等等矮燎。
  • Site Lifecycle 生成項目報告,站點赔癌,發(fā)布站點诞外。
3.1.7 maven 的概念模型

Maven 包含了一個項目對象模型 (Project Object Model),一組標準集合灾票,一個項目生命周期(ProjectLifecycle)峡谊,一個依賴管理系統(Dependency Management System),和用來運行定義在生命周期階段(phase)中插件(plugin)目標(goal)的邏輯刊苍。

  • 項目對象模型 (Project Object Model)
    一個 maven 工程都有一個 pom.xml 文件既们,通過 pom.xml 文件定義項目的坐標、項目依賴正什、項目信息啥纸、插件目標等。
  • 依賴管理系統(Dependency Management System)
    通過 maven 的依賴管理對項目所依賴的 jar 包進行統一管理婴氮。
    比如:項目依賴 junit4.9斯棒,通過在 pom.xml 中定義 junit4.9 的依賴即使用 junit4.9盾致,如下所示是 junit4.9的依賴定義:
<!-- 依賴關系 -->
<dependencies>
<!-- 此項目運行使用 junit,所以此項目依賴 junit -->
<dependency>
<!-- junit 的項目名稱 -->
<groupId>junit</groupId>
<!-- junit 的模塊名稱 -->
<artifactId>junit</artifactId>
<!-- junit 版本 -->
<version>4.9</version>
<!-- 依賴范圍:單元測試時使用 junit -->
<scope>test</scope>
</dependency>
  • 一個項目生命周期(Project Lifecycle)
    使用 maven 完成項目的構建荣暮,項目構建包括:清理庭惜、編譯、測試渠驼、部署等過程蜈块,maven 將這些過程規(guī)范為一個生命周期,如下所示是生命周期的各各階段:



    maven 通過執(zhí)行一些簡單命令即可實現上邊生命周期的各各過程迷扇,比如執(zhí)行 mvn compile 執(zhí)行編譯百揭、執(zhí)行 mvn clean 執(zhí)行清理。

  • 一組標準集合
    maven將整個項目管理過程定義一組標準蜓席,比如:通過 maven 構建工程有標準的目錄結構器一,有標準的生命周期階段、依賴管理有標準的坐標定義等厨内。
  • 插件(plugin)目標(goal)
    maven 管理項目生命周期過程都是基于插件完成的祈秕。

在實戰(zhàn)的環(huán)境中,我們都會使用流行的工具來開發(fā)項目雏胃。

3.2.1 idea 的 的 maven 配置
  • 3.2.1.1 打開 ?File ?Settings 配置 maven
    依據圖片指示请毛,選擇本地 maven 安裝目錄,指定 maven 安裝目錄下conf文件夾中 settings 配置文件瞭亮。
3.2.2 idea 中創(chuàng)個 建一個 maven 的 的 web 工程

打開 idea方仿,選擇創(chuàng)建一個新工程

選擇 idea提供好的 maven 的web 工程模板

點擊 Next填寫項目信息

點擊 Next,此處不做改動统翩。

點擊 Next選擇項目所在目錄

點擊 Finish后開始創(chuàng)建工程仙蚜,耐心等待,直到出現如下界面厂汗。

手動添加 src/main/java 目錄委粉,如下圖右鍵 main 文件夾?New?Directory

點擊 OK 后,在新的文件夾 java 上右鍵?Make Directory as?Sources Root

  • 3.2.2.1 創(chuàng)建一個 Servlet
    src/java/main 創(chuàng)建了一個 Servlet娶桦,但報錯

要解決問題贾节,就是要將 servlet-api-xxx.jar 包放進來,作為 maven 工程應當添加 servlet的坐標衷畦,從而導入它的 jar

  • 3.2.2.2 在 在 pom.xml 文件添加坐標
    直接打開 hello_maven 工程的 pom.xml 文件栗涂,再添加坐標

添加 jar 包的坐標時,還可以指定這個 jar 包將來的作用范圍霎匈。
每個 maven 工程都需要定義本工程的坐標戴差,坐標是 maven 對 jar 包的身份定義,比如:入門程序的
坐標定義如下:

<!--項目名稱铛嘱,定義為組織名+項目名暖释,類似包名-->
<groupId>com.demo</groupId>
<!-- 模塊名稱 -->
<artifactId>hello_maven</artifactId>
<!-- 當前項目版本號袭厂,snapshot 為快照版本即非正式版本,release為正式發(fā)布版本 -->
<version>0.0.1-SNAPSHOT</version>
<packaging > :打包類型
jar:執(zhí)行 package 會打成 jar 包
war:執(zhí)行 package 會打成 war 包
pom :用于 maven 工程的繼承球匕,通常父工程設置為 pom
  • 3.2.2.3 坐標的來源方式
    添加依賴需要指定依賴 jar 包的坐標纹磺,但是很多情況我們是不知道 jar 包的的坐標,可以通過如下方式查詢:

3.2.3 依賴范圍

A 依賴 B亮曹,需要在 A 的 pom.xml 文件中添加 B 的坐標橄杨,添加坐標時需要指定依賴范圍,依賴范圍包括:

  • compile:編譯范圍照卦,指 A在編譯時依賴 B式矫,此范圍為默認依賴范圍。編譯范圍的依賴會用在編譯役耕、測試采转、運行,由于運行時需要所以編譯范圍的依賴會被打包瞬痘。
  • provided:provided 依賴只有在當 JDK 或者一個容器已提供該依賴之后才使用故慈, provided 依賴在編譯和測試時需要,在運行時不需要框全,比如:servlet api 被 tomcat 容器提供察绷。
  • runtime:runtime 依賴在運行和測試系統的時候需要,但在編譯的時候不需要津辩。比如:jdbc的驅動包拆撼。由于運行時需要所以 runtime 范圍的依賴會被打包。
  • test:test 范圍依賴 在編譯和運行時都不需要丹泉,它們只有在測試編譯和測試運行階段可用情萤,比如:junit鸭蛙。由于運行時不需要所以test范圍依賴不會被打包摹恨。
  • system:system 范圍依賴與 provided 類似,但是你必須顯式的提供一個對于本地系統中 JAR文件的路徑娶视,需要指定 systemPath 磁盤路徑晒哄,system依賴不推薦使用。

在 maven-web 工程中測試各各 scop肪获。
測試總結:

  • 默認引入 的 jar 包 ------- compile 【默認范圍 可以不寫】(編譯寝凌、測試、運行 都有效 )
  • servlet-api 孝赫、jsp-api ------- provided (編譯较木、測試 有效, 運行時無效 防止和 tomcat 下 jar 沖突)
  • jdbc 驅動 jar 包 ---- runtime (測試青柄、運行 有效 )
  • junit ----- test (測試有效)
    依賴范圍由強到弱的順序是:compile>provided>runtime>test
3.2.4 項目中添加的坐標
3.2.5 設置 jdk 編譯版本

本教程使用 jdk1.8伐债,需要設置編譯版本為 1.8预侯,這里需要使用 maven 的插件來設置:
在 pom.xml 中加入:

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
3.2.6 編寫 servlet

在 src/main/java中創(chuàng)建 ServletTest


內容如下 :


3.2.7 編寫 jsp
3.2.8 在 web.xml中配置 servlet 訪問路徑
3.2.9 添加 tomcat7 插件
  • 在 pom 文件中添加如下內容

    此時點擊 idea最右側 Maven Projects, 就可以看到我們新添加的tomcat7 插件 雙擊 tomcat7插件下tomcat7:run 命令直接運行項目



    也可以直接點擊如圖按鈕峰锁,手動輸入 tomc7:run 命令運行項目



    點擊后彈出如下圖窗口
3.2.10 運行結果
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末萎馅,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子虹蒋,更是在濱河造成了極大的恐慌糜芳,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,430評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件魄衅,死亡現場離奇詭異峭竣,居然都是意外死亡,警方通過查閱死者的電腦和手機晃虫,發(fā)現死者居然都...
    沈念sama閱讀 94,406評論 3 398
  • 文/潘曉璐 我一進店門邪驮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人傲茄,你說我怎么就攤上這事毅访。” “怎么了盘榨?”我有些...
    開封第一講書人閱讀 167,834評論 0 360
  • 文/不壞的土叔 我叫張陵喻粹,是天一觀的道長。 經常有香客問我草巡,道長守呜,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,543評論 1 296
  • 正文 為了忘掉前任山憨,我火速辦了婚禮查乒,結果婚禮上,老公的妹妹穿的比我還像新娘郁竟。我一直安慰自己玛迄,他們只是感情好,可當我...
    茶點故事閱讀 68,547評論 6 397
  • 文/花漫 我一把揭開白布棚亩。 她就那樣靜靜地躺著蓖议,像睡著了一般。 火紅的嫁衣襯著肌膚如雪讥蟆。 梳的紋絲不亂的頭發(fā)上勒虾,一...
    開封第一講書人閱讀 52,196評論 1 308
  • 那天,我揣著相機與錄音瘸彤,去河邊找鬼修然。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的愕宋。 我是一名探鬼主播婆翔,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼掏婶!你這毒婦竟也來了啃奴?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,671評論 0 276
  • 序言:老撾萬榮一對情侶失蹤雄妥,失蹤者是張志新(化名)和其女友劉穎最蕾,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體老厌,經...
    沈念sama閱讀 46,221評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡瘟则,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,303評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了枝秤。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片醋拧。...
    茶點故事閱讀 40,444評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖淀弹,靈堂內的尸體忽然破棺而出丹壕,到底是詐尸還是另有隱情,我是刑警寧澤薇溃,帶...
    沈念sama閱讀 36,134評論 5 350
  • 正文 年R本政府宣布菌赖,位于F島的核電站,受9級特大地震影響沐序,放射性物質發(fā)生泄漏琉用。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,810評論 3 333
  • 文/蒙蒙 一策幼、第九天 我趴在偏房一處隱蔽的房頂上張望邑时。 院中可真熱鬧,春花似錦特姐、人聲如沸晶丘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽铣口。三九已至滤钱,卻和暖如春觉壶,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背件缸。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評論 1 272
  • 我被黑心中介騙來泰國打工铜靶, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 48,837評論 3 376
  • 正文 我出身青樓争剿,卻偏偏與公主長得像已艰,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子蚕苇,可洞房花燭夜當晚...
    茶點故事閱讀 45,455評論 2 359

推薦閱讀更多精彩內容

  • 第1章 Maven 介紹 什么是 Maven 什么是 Maven Maven 的正確發(fā)音是[?mev?n]哩掺,而不是...
    強某某閱讀 2,383評論 0 25
  • 一、maven的兩個作用 項目自動化構建涩笤,通過命令行就可以完成整個項目構建過程嚼吞,不需要我們手動地進行項目構建 管理...
    lifeline張閱讀 851評論 0 1
  • 1.編寫POM Maven項目的核心文件是pom.xml,POM(Project Objcet Model)項目對...
    zlcook閱讀 5,912評論 7 26
  • 前言 在Java項目開發(fā)中蹬碧,項目的編譯舱禽、測試、打包等是比較繁瑣的恩沽,屬于重復勞動的工作誊稚,浪費人力和時間成本。以往開發(fā)...
    JourWon閱讀 1,124評論 0 1
  • Maven的基本了解 什么是Maven罗心? Maven就是Apache下的一個開源項目里伯。它是用純java開發(fā)的。是一...
    Bcome閱讀 2,831評論 0 7