一、Maven的常用命令
1辅斟、comopile
compile是maven工程的編譯命令寒跳,作用是將src/main/java下的文件編譯為class文件輸出到target目錄下固逗。
cmd進入命令狀態(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)容。在你進入公司后一般都需要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 在進行真正的構(gòu)建之前進行一些清理工作。
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 包進行統(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 (測試有效)
依賴范圍由強到弱的順序是:compile>provided>runtime>test