我們可以在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.2.3.1 從互聯網 搜索
http://search.maven.org/
http://mvnrepository.com/
網站搜索示例:
- 3.2.2.3.1 從互聯網 搜索
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 命令運行項目
點擊后彈出如下圖窗口