13161216443

您所在位置: 首頁> 學習課程> java培訓 | Maven系列:第1篇:什么是maven?為什么需要它?

java培訓 | Maven系列:第1篇:什么是maven?為什么需要它?

發布百知教育 來源:學習課程 2019-11-01

maven系列目標:從入門開始開始掌握一個高級開發所需要的maven技能。

這是maven系列第1篇。

為什么我們要學習maven?

學習某些技術,肯定是我們遇到了某些問題,而這些問題目前手頭上沒有很好的方案去解決,此時剛好有一種技術可以很好的解決這個問題,這樣能夠驅動我們愿意去學。所以我們學任何技術之前,需要先了解這種技術能夠解決什么問題。帶著問題去學習,大家才有興趣,才能夠更快的掌握。

我們遇到了什么問題呢?

maven還未出世的時候,我們有很多痛苦的經歷。

痛點1:jar包難以尋找

比如我們項目中需要用到fastjson,此時我們會去百度上檢索fastjson相關jar包,然后下載下來,放到項目的lib下面,然后加到項目的classpath下面,用著用著發現這個jar的版本太老了,不是我們想要的,然后又重新去找,痛苦啊。

痛點2:jar包依賴的問題

jar包一般都不是獨立存在的,一般一些jar也會用到其他的jar,比如spring-aop.jar會用到spring-core.jar,這種依賴可能比較簡單,有些依賴可能有很多級,比如a.jar依賴于b.jar,而b.jar依賴c.jar,而c.jar又依賴于b.jar,當你用到a.jar的時候,你需要把其他3個也進入才可以,所以你用到一個jar的時候,你必須明確知道這些jar還會依賴于哪些jar,把他們都引入進來,否則項目是無法正常運行的,當項目用到很多jar的時候,我們是很難判斷缺少哪些jar的,只有在項目運行過程報錯了,才知道,這種也是相當痛苦的,浪費了大量時間。

痛點3:jar包版本沖突問題

項目中用到了a.jar,a.jar依賴于c.jar的1.5版本,然后我們把這2個jar拷貝到項目中,后面又用到了b.jar,但是b.jar又依賴于c.jar的1.0版本,此時你把b.jar和c-1.0.jar引進來了,會發現c.jar有2個版本,發生沖突了,啟動的時候會報錯,這種情況你要著手去解決jar沖突的問題,也是非常痛苦的。

當我們從網上找到一個jar包來使用的時候,我們是很難判斷這個jar依賴的其他jar的版本的,比如a.jar依賴于b.jar,你從網上把b.jar找到了,最后放入項目中,發現b.jar的版本太老了,又得去重新找。

記得之前在第三方支付工作的時候,我記憶猶新,當時用到的是lvy來引入jar的,這玩意解決jar包的沖突沒有什么好辦法,為了解決項目中jar包沖突的問題,花了整整一周時間。

痛點4:jar不方便管理

當我們的項目比較大的時候,我們會將一個大的項目分成很多小的項目,每個小項目由幾個開發負責,比如一個電商項目分為:賬戶相關的項目、訂單相關的項目、商品相關的項目,這些項目的結構都是類似的,用到的技術都是一樣的:ssm(spring、springmvc、mybatis),然后每個項目都需要把這些jar拷貝一份到自己的項目目錄中,最后10個項目只是jar就復制了10份,后來,我們發現項目中有些jar需要升級版本,打算替換一下,此時我們需要依次去替換10個項目,也是相當痛苦。

痛點5:項目結構五花八門

很久之前,我們使用eclipse搭建一個項目的時候,java源碼的位置、資源文件的位置、測試文件的位置、靜態資源位置、編譯之后的class文件位置,都是可以隨意放的,這些是由各自公司的架構師搭建項目時定好的,根據他們的經驗來定義的,導致每個公司可能項目結構都不太一樣,來新人之后,看到項目結構一臉悶逼,根本不知道哪是哪,需要人指導,無形的增加了成本,如果大家都按照某種規范采用同一種項目結構,這樣豈不是很方便么,大家按照某種約定,項目使用同樣的結構,比如:java文件、資源文件、測試用例、靜態資源、編譯之后的class、打包之后jar的位置等等各種文件的位置,這些東西,如果所有做java開發的公司都約定好的,這樣拿到一個項目之后,就可以省去很多事情了。

痛點6:項目的生命周期控制方式五花八門

一個項目對于開發來說,生命周期是這樣的:搭建項目結構、編碼、跑測試用例、編譯、打包、發布到環境測試、發布到生產環境。其中除了編碼之外,大多數時間都是在編譯、打包、發布到測試環境,然后測試開始測試,測試提出bug,開發接著修改bug,之后又進行自測、編譯、打包、發布到測試環境,多數時間都在重復著跑單元測試、編譯、打包、發布的工作。在沒有自動化編譯的時候,每個過程都需要我們手動去操作,可能有些開發比較優秀,將這些操作寫出自動化的腳本來進行了,但是每個人寫的自動化的腳本可能都是不一樣的,有些用java寫,有些人用shell寫等等。

后面有了Ant,ant可以將運行測試用例、編譯、打包、發布搞成自動化的,ant自由度比較高,需要自己去寫很多配置,比如編譯:需要指定源碼位于什么地方,編譯之后的文件放在什么地方。ant的靈活度比極高,細節都交給了開發者自己去控制了,每個人寫出來的ant腳本也是各種各樣的,不利于大家統一維護和接受。

像上面這些過程,幾乎是所有java項目都需要經歷的,屬于高頻必備的操作,如果全世界所有開發java的能夠約定好java項目的結構,測試用例存放的位置,編譯之后的class存放的位置、打包之后文件存放的位置,自動化腳本都是用同一種規范來開發,那么大家最終寫的自動化發布的腳本都是類似的,只是最后發布的地址不一樣,其他都是一樣的,這樣的腳本會簡化很多,新人來了上手也非???。

maven是什么呢?

maven就是解決上面所有痛點的神器,算是所有開發者的福音。

使用maven搭建的項目架構,都需要遵循同樣的結構,java源文件、資源文件、測試用例類文件、靜態資源文件這些都是約定好的,大家都按照這個約定來,所有如果你們的項目是使用maven創建的,招新人來接手,如果他們懂maven,根本不需要培訓,上來就可以看懂整個項目的結構。

maven給每個jar定義了唯一的標志,這個在maven中叫做項目的坐標,通過這個坐標可以找到你需要用到的任何版本的jar包。

maven會自動解決jar依賴的問題,比如你用到了a-1.0.jar,而a-1.0.jar依賴于b-1.1.jar和c-1.5.jar,當我們通過maven把a-1.0.jar引入之后,b-1.1.jar和c-1.5.jar會自動被引入進來。

maven可以很容易的解決不同版本之間的jar沖突的問題。

maven使開發者更加方便的控制整個項目的生命周期,比如:

mvn clear 可以清理上次已編譯好的代碼
mvn compile 可以自動編譯項目
mvn test 可以自動運行所有測試用例
mvn package 可以完成打包需要的所有操作(自動包含了清理、編譯、測試的過程)

還有更多更多好用的操作,由于maven使所有項目結構都是約定好的,所以這些操作都被簡化為了非常簡單的命令。

我們自己開發了一些工具包,需要給其他人使用時,只需要一個簡單的mvn install命令就可以公布出去了,然后將這個jar的坐標告知使用者,使用者就可以找到了,根本不需要你將jar包傳輸給他。

由于maven項目結構都是約定好的,所以非常方便擴展,上面說的各種maven命令都是以插件的形式集成進來的,如果你愿意,你也可以自己開發一些maven插件給其他人使用,比如阿里內部自己開發的插件自動將項目發布到阿里云上面,非常方便開發發布項目。

再來看一下官方解釋什么是maven:maven是apache軟件基金會組織維護的一款自動化構建工具,專注服務于java平臺的項目構建和依賴管理。


java培訓:http://www.akpsimsu.com/java2019


注釋:本文內容來自公眾號路人甲java,版權歸原作者所有。


上一篇:python培訓 | 38個常用Python庫:數值計算、可視化等8大領域都有

下一篇:應屆生去公司找個Java程序員的職位需要什么技能?

相關推薦

www.akpsimsu.com

有位老師想和您聊一聊

關閉

立即申請