Maven入門(3) 之 Maven自動化構(gòu)建項目

??第一篇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 工程和其構(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ù)著編譯、打包、部署、測試這些流程,浪費了大量的時間和精力。

??如下圖:


圖1

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

圖2

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

圖3

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

圖4

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容