Maven是個啥? Maven主要服務於基於Java平臺的項目構建、依賴管理和項目信息管理,並且Maven是跨平臺的,這意味著無論是在Windows上,還是在Linux或者Mac上,都可以使用同樣的命令。 構建(build)又是個啥? 每天來公司第一件事情就是拉取最新代碼,然後進行單元測試(如果失敗 ...
Maven是個啥?
Maven主要服務於基於Java平臺的項目構建、依賴管理和項目信息管理,並且Maven是跨平臺的,這意味著無論是在Windows上,還是在Linux或者Mac上,都可以使用同樣的命令。
構建(build)又是個啥?
每天來公司第一件事情就是拉取最新代碼,然後進行單元測試(如果失敗了還需要跟相關開發的同事一起調試,並修複錯誤的代碼),然後編寫自己的單元測試和寫業務代碼。
仔細回想下每天的工作,除了編寫代碼,我們每天有相當一部分時間花在了編譯,單元測試,生成文檔,打包,部署等繁瑣且不起眼的工作上面,這就是構建。
於是有人用軟體的方法讓這一系列工作完全自動化,使得軟體的構建可以像全自動流水線一樣,只需要一條簡單的命令,所有煩瑣的步驟都能夠自動完成,很快就能得到最終結果,Maven就是這樣一個工具,能夠幫我們自動化構建過程,從清理、編譯、測試到生成報告,再到打包和部署。
使用Maven的好處
Maven最大化地消除了構建的重覆,抽象了構建生命周期,並且為絕大部分的構建任務提供了已實現的插件,我們不再需要定義過程,甚至不需要再去實現這些過程中的一些任務。最簡單的例子是測試,我們沒必要告訴Maven去測試,更不需要告訴Maven如何運行測試,只需要遵循Maven的約定編寫好測試用例,當我們運行構建的時候,這些測試便會自動運行。
想象一下,Maven抽象了一個完整的構建生命周期模型,這個模型吸取了大量其他的構建腳本和構建工具的優點,總結了大量項目的實際需求。如果遵循這個模型,可以避免很多不必要的錯誤,可以直接使用大量成熟的Maven插件來完成我們的任務(很多時候我們可能都不知道自己在使用Maven插件)。此外,如果有非常特殊的需求,我們也可以輕鬆實現自己的插件。
Maven還有一個優點,它能幫助我們標準化構建過程。在Maven之前,十個項目可能有十種構建方式;有了Maven之後,所有項目的構建命令都是簡單一致的,這極大地避免了不必要的學習成本,而且有利於促進項目團隊的標準化。
在這個開源的年代里,幾乎任何Java應用都會借用一些第三方的開源類庫,這些類庫都可通過依賴的方式引入到項目中來。隨著依賴的增多,版本不一致、版本衝突、依賴臃腫等問題都會接踵而來。手工解決這些問題是十分枯燥的,幸運的是Maven提供了一個優秀的解決方案,它提供了中央倉庫,通過一個坐標系統準確地定位每一個構件(artifact),也就是通過一組坐標Maven能夠找到任何一個Java類庫(如jar文件)。Maven給這個類庫世界引入了經緯,讓它們變得有秩序,於是我們可以藉助它來有序地管理依賴,輕鬆地解決那些繁雜的依賴問題。
通過一些Maven的衍生工具(如Nexus),我們還能對其進行快速地搜索。只要定位了坐標,Maven就能夠幫我們自動下載,省去了手工勞動。
ps:
本篇文章內容主要介紹了什麼是Maven,以及為什麼推薦使用Maven。