一、Maven的常用命令
1、comopile
compile是maven工程的編譯命令,作用是將src/main/java下的文件編譯為class文件輸出到target目錄下。
cmd進(jìn)入命令狀態(tài),執(zhí)行mvn compile,如下圖提示成功:

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

2、test
test是maven工程的測試命令 mvn test,會執(zhí)行src/test/java下的單元測試類。
cmd執(zhí)行mvn test執(zhí)行src/test/java下單元測試類,下圖為測試結(jié)果,運行1個測試用例,全部成功。

3、clean
clean是maven工程的清理命令,執(zhí)行 clean會刪除target目錄及內(nèi)容。在你進(jìn)入公司后一般都需要clean一下別人的代碼
4、package
package是maven工程的打包命令,對于java工程執(zhí)行package打成jar包,對于web工程打成war包。
5、install
install是maven工程的安裝命令,執(zhí)行install將maven打成jar包或war包發(fā)布到本地倉庫。
從運行結(jié)果中,可以看出:
當(dāng)后面的命令執(zhí)行時,前面的操作過程也都會自動執(zhí)行,
二、Maven的生命周期

執(zhí)行后面的命令的時候前面的命令會自動執(zhí)行,
maven對項目構(gòu)建過程分為三套相互獨立的生命周期,請注意這里說的是“三套”,而且“相互獨立”,這三套生命周期分別是:
Clean Lifecycle 在進(jìn)行真正的構(gòu)建之前進(jìn)行一些清理工作。
Default Lifecycle 構(gòu)建的核心部分,編譯,測試,打包,部署等等。
Site Lifecycle 生成項目報告,站點,發(fā)布站點。
三、Maven概念模型圖

項目對象模型 (Project Object Model)
一個maven工程都有一個pom.xml文件,通過pom.xml文件定義項目的坐標(biāo)、項目依賴、項目信息、插件目標(biāo)等。
依賴管理系統(tǒng)(Dependency Management System)
通過maven的依賴管理對項目所依賴的jar 包進(jìn)行統(tǒng)一管理。
比如:項目依賴junit4.9,通過在pom.xml中定義junit4.9的依賴即使用junit4.9,如下所示是junit4.9的依賴定義:
<!-- 依賴關(guān)系 -->
<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完成項目的構(gòu)建,項目構(gòu)建包括:清理、編譯、測試、部署等過程,maven將這些過程規(guī)范為一個生命周期,如下所示是生命周期的各各階段:

maven通過執(zhí)行一些簡單命令即可實現(xiàn)上邊生命周期的各各過程,比如執(zhí)行mvn compile執(zhí)行編譯、執(zhí)行mvn clean執(zhí)行清理。
一組標(biāo)準(zhǔn)集合
maven將整個項目管理過程定義一組標(biāo)準(zhǔn),比如:通過maven構(gòu)建工程有標(biāo)準(zhǔn)的目錄結(jié)構(gòu),有標(biāo)準(zhǔn)的生命周期階段、依賴管理有標(biāo)準(zhǔn)的坐標(biāo)定義等。
插件(plugin)目標(biāo)(goal)
maven 管理項目生命周期過程都是基于插件完成的。
四、依賴范圍
A依賴B,需要在A的pom.xml文件中添加B的坐標(biāo),添加坐標(biāo)時需要指定依賴范圍,依賴范圍包括:
compile:編譯范圍,指A在編譯時依賴B,此范圍為默認(rèn)依賴范圍。編譯范圍的依賴會用在編譯、測試、運行,由于運行時需要所以編譯范圍的依賴會被打包。
provided:provided依賴只有在當(dāng)JDK或者一個容器已提供該依賴之后才使用, provided依賴在編譯和測試時需要,在運行時不需要,比如:servlet api被tomcat容器提供。
runtime:runtime依賴在運行和測試系統(tǒng)的時候需要,但在編譯的時候不需要。比如:jdbc的驅(qū)動包。由于運行時需要所以runtime范圍的依賴會被打包。
test:test范圍依賴 在編譯和運行時都不需要,它們只有在測試編譯和測試運行階段可用,比如:junit。由于運行時不需要所以test范圍依賴不會被打包。
system:system范圍依賴與provided類似,但是你必須顯式的提供一個對于本地系統(tǒng)中JAR文件的路徑,需要指定systemPath磁盤路徑,system依賴不推薦使用。

在maven-web工程中測試各各scop。
測試總結(jié):
默認(rèn)引入 的jar包 ------- compile 【默認(rèn)范圍 可以不寫】(編譯、測試、運行 都有效 )
servlet-api 、jsp-api ------- provided (編譯、測試 有效, 運行時無效 防止和tomcat下jar沖突)
jdbc驅(qū)動jar包 ---- runtime (測試、運行 有效 )
junit ----- test (測試有效)
依賴范圍由強(qiáng)到弱的順序是:compile>provided>runtime>test
五、工程拆封與聚合
