日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Maven自動化構建工具

發(fā)布時間:2025/7/25 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Maven自動化構建工具 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?

?

第一章?Why

Maven是干什么用的?這是很多同學(xué)學(xué)這個課程后最的問題。之所以提出這個問題是因為即使不使用Maven我們?nèi)匀豢梢?/span>進行B/S結(jié)構(gòu)項目的開發(fā)。從表述層、業(yè)務(wù)邏輯層到持久化到數(shù)據(jù)庫有成熟的解決方案——使用Maven我們一樣可以開發(fā)項目啊?所以我們有必要通過企業(yè)開發(fā)中的實際需求來看一看哪些方面是我們現(xiàn)有技術(shù)不足。

?

1.1 添加第三方jar?

在今天JavaEE開發(fā)領(lǐng)域,大量的第三方框架和工具可以供我們使用使用這些jar簡單的方法就是復(fù)制粘貼到WEB-INF目錄下的lib目錄下。但是這會導(dǎo)致每次創(chuàng)建一個新的工程就需要將jar包重復(fù)復(fù)制到lib目錄下從而造成工作區(qū)中存在大量重復(fù)的文件。

使用Maven每個jar在本地倉庫中保存一份,需要jar包工程只需要維護一個文本形式的jar包的引用——我們稱之為“坐標(biāo)”不僅極大的節(jié)約了存儲空間讓項目更輕巧,避免了重復(fù)文件太多而造成的混亂

1.2 jar包之間的依賴關(guān)系

jar往往不是孤立存在的,很多jar包都需要其他jar支持下才能夠正常工作,我們稱之為jar包之間的依賴關(guān)系。典型的例子是:commons-fileupload-1.3.jar依賴于commons-io-2.0.1.jar,如果沒有IOFileUpload包就不能正常工作。

那么問題來了,知道你所使用的所有jar包的依賴關(guān)系當(dāng)你拿到一個新的從未使用過的jar包,如何得知他需要哪些jar包的支持呢?如果不了解這個情況,導(dǎo)入jar包不夠,那么現(xiàn)有的程序?qū)⒉荒苷9ぷ?/span>。進一步當(dāng)你的項目中需要用到上百個jar包時,還會人為的,手工的逐一確認它們依賴的其他jar包嗎?這簡直是不可想象的。

引入Maven后,Maven就可以替我們自動的將當(dāng)前jar包所依賴的其他所有jar包全部導(dǎo)入進來,無需人工參與,節(jié)約了我們大量的時間和精力。實際例子來說明就是:通過Maven導(dǎo)入commons-fileupload-1.3.jar后commons-io-2.0.1.jar會被自動導(dǎo)入,程序員不必了解這個依賴關(guān)系。

1.3 處理jar包之間的沖突

上一點說的是jar包不足項目無法正常工作,其實有的時候jar包多了項目仍然無法正常工作這就是jar包之間的沖突。

舉個例子:我們現(xiàn)在有三個工程MakeFriend、HelloFriendHelloMakeFriend依賴HelloFriendHelloFriend依賴HelloHello依賴log4j.1.2.17.jarHelloFriend依賴log4j.1.2.14.jar下圖所示:

那么MakeFriend工程運行時環(huán)境中導(dǎo)入log4j.1.2.14.jar還是log4j.1.2.17.jar

這樣的問題一個兩個還可以手工解決,但如果系統(tǒng)存在幾十上百的jar包,他們之間的依賴關(guān)系會非常復(fù)雜,幾乎不可能手工實現(xiàn)依賴關(guān)系的梳理。

使用Maven就可以自動的處理jar之間的沖突問題。因為Maven中內(nèi)置了兩條依賴原則:最短路徑者優(yōu)先和聲明者優(yōu)先,上述問題MakeFriend工程會自動使用log4j.1.2.14.jar

?

1.4 獲取第三方jar

JavaEE開發(fā)中需要使用到的jar種類繁多,幾乎每個jar包在其本身的官網(wǎng)獲取方式都不盡相同。為了查找一個jar遍互聯(lián)網(wǎng),身心俱疲,沒有經(jīng)歷過的人或許體會不到這種折磨不僅如此,費勁心血找的jar里有的時候并沒有你需要的那個類,又或者同名的類沒有你要的方法——以不規(guī)范的方式獲取的jar往往是不規(guī)范的。

使用Maven我們可以享受到一個完全統(tǒng)一規(guī)范的jar包管理體系你只需要在你的項目中坐標(biāo)的方式依賴一個jar包,Maven就會自動從中央倉庫進行下載,并同時下載這個jar依賴的其他jar——規(guī)范、完整、準(zhǔn)確!一次性解決所有問題

Tips:在這里我們順便說一下,統(tǒng)一的規(guī)范幾乎可以說成是程序員的最高信仰如果沒有統(tǒng)一的規(guī)范,意味著每個具體的技術(shù)都各自為政,需要諸多不同的特殊的方式加入到項目中好不容易加入進來還會和其他技術(shù)格格不入,最終受苦的是我們。任何一個領(lǐng)域的統(tǒng)一規(guī)范能夠極大的降低程序員的工作難度,減少工作量。例如:USB接口可以外接各種設(shè)備,如果每個設(shè)備有自己獨特的接口那么不僅制造商需要維護各個接口的設(shè)計方案,使用需要詳細了解每個設(shè)備對應(yīng)的接口,無疑是非常繁瑣的。

1.5 項目拆分成多個工程模塊

隨著JavaEE項目的規(guī)模越來越龐大,開發(fā)團隊的規(guī)模也與日俱增。一個項目上千人的團隊持續(xù)開發(fā)很多年對于JavaEE項目來說再正常不過。那么我們想象一下:幾百的人開發(fā)的項目是同一個Web工程。那么架構(gòu)師、項目經(jīng)理該如何劃分項目的模塊、如何分工呢?這么大的項目已經(jīng)不可能通過package結(jié)構(gòu)來劃分模塊,必須將項目拆分成多個工程協(xié)同開發(fā)。多個模塊工程中有的是Java工程,有的是Web工程。

那么工程拆分后又如何進行互相調(diào)用和訪問呢?就需要用到Maven的依賴管理機制。大家請看我們Survey調(diào)查項目拆分的情況:

上層模塊依賴下層,所以下層模塊中定義的API都可以為上層所調(diào)用和訪問。

1.6 實現(xiàn)項目的分布式部署

在實際生產(chǎn)環(huán)境中,項目規(guī)模增加到一定程度后,可能每個模塊都需要運行在獨立的服務(wù)器上我們稱之為分布式部署這里同樣需要用到Maven

第二章?What

如果上面的描述能夠使你認識到使用Maven是多么的重要我們下面就來介紹一下Maven是什么。

2.1 自動化構(gòu)建工具

Maven這個單詞的本意是:專家,內(nèi)行。讀音['me?v(?)n]或['mevn],不要讀作“媽”。

Maven一款自動化構(gòu)建工具專注服務(wù)于Java平臺的項目構(gòu)建依賴管理在JavaEE開發(fā)的歷史上構(gòu)建工具的發(fā)展也經(jīng)歷了一系列的演化和變遷:

Make→Ant→Maven→Gradle→其他……

那么什么是構(gòu)建呢?

2.2 構(gòu)建概念

構(gòu)建并不是創(chuàng)建,創(chuàng)建一個工程不等于構(gòu)建一個項目。了解構(gòu)建的含義我們應(yīng)該由淺入深的從以下面來看:

①純Java代碼

大家都知道,我們Java是一門編譯型語言,.java擴展名源文件需要編譯成.class擴展名字節(jié)碼文件才能夠執(zhí)行。所以編寫任何Java代碼想要執(zhí)行的話就必須經(jīng)過編譯得到對應(yīng)的.class文件

②Web工程

當(dāng)我們需要通過瀏覽器訪問Java程序時必須將包含Java程序的Web工程編譯的結(jié)果“拿”服務(wù)器上的指定目錄下,并啟動服務(wù)器才這個“拿”的過程我們部署

我們可以編譯的Web工程比喻一只生雞,編譯好的Web工程是一只煮熟的雞,編譯部署的過程就是將雞燉熟。

Web工程和其編譯結(jié)果的目錄結(jié)構(gòu)對比見下圖:

?

?

③實際項目

實際項目中整合第三方框架Web工程中除了Java程序JSP頁面圖片等靜態(tài)資源之外,還包括第三方框架的jar包以及各種各樣的配置文件。所有這些資源都必須按照正確的目錄結(jié)構(gòu)部署到服務(wù)器上項目才可以運行。

所以綜上所述:構(gòu)建就是以我們編寫的Java代碼、框架配置文件、國際化其他資源文件JSP頁面和圖片等靜態(tài)資源作為“原材料”,生產(chǎn)一個可以運行的項目的過程。

那么項目構(gòu)建的全過程中都包含哪些環(huán)節(jié)呢

2.3 構(gòu)建環(huán)節(jié)

①清理:刪除以前的編譯結(jié)果,為重新編譯做好準(zhǔn)備。

②編譯:將Java源程序編譯為字節(jié)碼文件。

測試:針對項目中的關(guān)鍵點進行測試,確保項目在迭代開發(fā)過程中關(guān)鍵點的正確

④報告:在每一次測試后以標(biāo)準(zhǔn)的格式記錄和展示測試結(jié)果

⑤打包:將一個包含諸多文件的工程封裝為一個壓縮文件用于安裝或部署。Java工程對應(yīng)jar包,Web工程對應(yīng)war包。

安裝:在Maven環(huán)境下特指將打包的結(jié)果——jar包或war安裝到本地倉庫中。

部署:將打包的結(jié)果部署到遠程倉庫或?qū)?/span>war包部署到服務(wù)器上運行。

2.4 自動化構(gòu)建

其實上述環(huán)節(jié)我們在Eclipse中都可以找對應(yīng)的操作,只是不太標(biāo)準(zhǔn)。那么既然IDE已經(jīng)可以進行構(gòu)建了我們?yōu)槭裁催€要使用Maven的構(gòu)建工具呢?我們來看一個小故事:

這是陽光明媚的一天。托馬斯向往常一樣早早的來到了公司,沖好一杯咖啡,進入了自己的郵箱——很不幸,QA小組發(fā)來了一封郵件,報告了他昨天提交的模塊的測試結(jié)果——有BUG。“好吧,反正也不是第一次”,托馬斯搖搖頭,進入IDE,運行自己的程序,編譯、打包、部署到服務(wù)器上,然后按照郵件中的操作路徑進行測試。“嗯,沒錯,這個地方確實有問題”,托馬斯說道。于是托馬斯開始嘗試修復(fù)這個BUG,當(dāng)他差不多有眉目的時候已經(jīng)到了午飯時間。

下午繼續(xù)工作。BUG很快被修正了,接著托馬斯對模塊重新進行了編譯、打包、部署,測試之后確認沒有問題了,回復(fù)了QA小組的郵件。

一天就這樣過去了,明媚的陽光化作了美麗的晚霞,托馬斯卻覺得生活并不像晚霞那樣美好啊。

讓我們來梳理一下托馬斯這一天中的工作內(nèi)容

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

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

?

?

那么Maven又是如何實現(xiàn)自動化構(gòu)建的呢?簡單的說來就是可以自動的從構(gòu)建過程的起點一直執(zhí)行到終點:

2.5 Maven核心概念

Maven之所以能夠?qū)崿F(xiàn)自動化的構(gòu)建和它設(shè)計是緊密相關(guān)的。我們對Maven的學(xué)習(xí)就圍繞它九個核心概念展開

POM

②約定的目錄結(jié)構(gòu)

③坐標(biāo)

依賴管理

⑤倉庫管理

⑥生命周期

⑦插件和目標(biāo)

繼承

⑨聚合

轉(zhuǎn)載于:https://www.cnblogs.com/highpointengineer/p/10899292.html

總結(jié)

以上是生活随笔為你收集整理的Maven自動化構建工具的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。