??第一篇Maven的介紹中提到說,Maven是一款非常強大的項目管理工具。其實他的最主要的兩個功能就是項目管理和構(gòu)建項目。
??所以Maven也可以這樣介紹,Maven 是 Apache 軟件基金會組織維護的一款自動化構(gòu)建工具,專注服務(wù)于 Java 平臺的項目構(gòu)建和依賴管理。
這里再次重點說一下Maven的項目構(gòu)建。
1、什么是構(gòu)建
??構(gòu)建并不是創(chuàng)建,創(chuàng)建一個項目并不等于構(gòu)建一個項目。要了解構(gòu)建的含義我們應(yīng)該從以下三個層面來看:
編譯
??大家都知道,我們 Java 是一門編譯型語言,.java 擴展名的源文件需要編譯成.class 擴展名的字節(jié)碼文件才能夠執(zhí)行。所以編寫任何 Java 代碼想要執(zhí)行的話就必須經(jīng)過編譯得到對應(yīng)的.class 文件。部署
??當(dāng)我們需要通過瀏覽器訪問 Java 程序時就必須將包含 Java 程序的 Web 工程編譯的結(jié)果“拿”到服務(wù)器上的指定目錄下,并啟動服務(wù)器才行。這個“拿”的過程我們叫部署。
??我們可以將未編譯的 Web 工程比喻為一只生的雞,編譯好的 Web 工程是一只煮熟的雞,編譯部署的過程就是將雞燉熟。
????生的雞——>處理——>熟的雞
????動態(tài)Web工程——>編譯、部署——>編譯結(jié)果
- 構(gòu)建過程
??在實際項目中整合第三方框架,Web 工程中除了 Java 程序和 JSP 頁面、圖片等靜態(tài)資源之外,還包括第三方框架的 jar 包以及各種各樣的配置文件。所有這些資源都必須按照正確的目錄結(jié)構(gòu)部署到服務(wù)器上,項目才可以運行。
所以綜上所述:構(gòu)建就是以我們編寫的 Java 代碼、框架配置文件、國際化等其他資源文件、JSP 頁面和圖片等靜態(tài)資源作為“原材料”,去“生產(chǎn)”出一個可以運行的項目的過程。
2、Web 工程和其構(gòu)建結(jié)果的目錄結(jié)構(gòu)對比
??見下圖:

說明:
編譯:在web項目還沒有編譯的時候,是沒有classes目錄里邊的內(nèi)容,在src目錄里邊的內(nèi)容編譯之后,生成的.class文件都在classes目錄里。
數(shù)字對應(yīng)圖中的數(shù)字
1:web工程的名稱,編譯之后就是訪問路徑的根目錄。
2:把web項目構(gòu)建后,編譯好的文件放入了構(gòu)建好項目的WEB-INF目錄里。
3:web項目中的WebContent目錄結(jié)構(gòu),就是構(gòu)建后項目的整體目錄。
??當(dāng)我們訪問項目的時候,不是根據(jù)web工程的目錄結(jié)構(gòu)訪問,而是根據(jù)構(gòu)建好之后的工程目錄進行訪問,和資源的獲取。
3、構(gòu)建過程的幾個主要環(huán)節(jié)
- 清理:將以前編譯得到的舊的class字節(jié)碼文件刪除,為重新編譯做好準(zhǔn)備。
- 編譯:將 Java 源程序編譯為class字節(jié)碼文件。
- 測試:針對項目中的關(guān)鍵點進行測試,確保項目在迭代開發(fā)過程中關(guān)鍵點的正確性。(讓maven自動的去調(diào)用測試的程序)
- 報告:在每一次測試后以標(biāo)準(zhǔn)的格式記錄和展示測試結(jié)果。(測試程序執(zhí)行的結(jié)果)
- 打包:將一個包含諸多文件的工程封裝為一個壓縮文件用于安裝或部署。Java 工程對應(yīng) jar 包,Web工程對應(yīng) war 包。
- 安裝:在 Maven 環(huán)境下特指將打包的結(jié)果(jar 包或 war 包)安裝(復(fù)制)到本地倉庫中。
- 部署:將打包的結(jié)果部署到遠程倉庫或?qū)?war 包部署到服務(wù)器上運行。(將動態(tài)Web工程生成的war包復(fù)制到Servlet容器的指定目錄下,使其可以運行)
4、舉個例子
??在很早的時候,我們修改一個bug,收到了QA的郵件,我們會打開IDE工具進行編譯、打包、部署、測試,把項目運行起來,定位bug,梳理原因,解決bug等一系列調(diào)試,期間不停的重復(fù)著編譯、打包、部署、測試這些流程,浪費了大量的時間和精力。
??如下圖:

??從圖中我們發(fā)現(xiàn),很大一部分時間花在了“編譯、打包、部署、測試”這些程式化的工作上面,而真正需要由“人”的智慧實現(xiàn)的分析問題和編碼卻只占了很少一部分。

??能否將這些程式化的工作交給機器自動完成呢?——當(dāng)然可以!這就是自動化構(gòu)建工具。

??此時 Maven 的意義就體現(xiàn)出來了,它可以自動的從構(gòu)建過程的起點一直執(zhí)行到終點:

??想必大家看完這篇文章,對Maven的自動化構(gòu)建有了更深一些的了解了。