maven 工作原理和添加jar包技巧


 
 


相 信只要做過 Java 開發的童鞋們,對 Ant 想必都不陌生,我們往往使用 Ant 來構建項目,尤其是涉及到特別繁雜的工作量,一個 build.xml 能夠完成編譯、測試、打包、部署等很多任務,這在很大的程度上解放了程序員們的雙手。但同時也存在一些其他的問題,比如:jar 文件管理混亂,每次都需要自己去下載;build.xml 因項目結構的不同導致差異性較大。


概況
自 從項目中引入 Maven 以后,以前 Ant 能解決的,Maven 提供了更加簡潔的解決方案,而以前 Ant 解決不了的,Maven 也能很好的解決。這就直接導致了項目管理工具的更新換代。當然,這已不是什么新鮮事了。只不過,一直到現在才有時間來分享項目中使用 Maven 的感受,這一點上,真的很抱歉,后續會及時的更新。
Maven 的入門教程網上已經有很多了,這里就不再贅述這些基本知識了。還沒有接觸過 Maven 的童鞋,請移步 Google 或 Baidu。之后再回來看這篇文章。在這篇文章里,我主要結合項目中 Maven 的使用,以及需要注意的事項來與大家討論。

原理
說 到 Maven 的原理,其實很簡單,就是采用遠程倉庫和本地倉庫以及一個類似 build.xml 的 pom.xml,將 pom.xml 中定義的 jar 文件從遠程倉庫下載到本地倉庫,各個應用使用同一個本地倉庫的 jar,同一個版本的 jar 只需下載一次,而且避免每個應用都去拷貝 jar。




結構
項目中我們都會根據自己的習慣創建目錄結構,雖然有規范,但難免會有疏漏,長此下去,項目的結構會越來越亂的。Maven 解決了這個問題,對於不同的項目,它提供了多種選擇,並將其作為目錄模板,如下圖所示。

使用目錄模板,可以使pom.xml更簡潔。因為Maven2已經根據缺省目錄,預定義了相關的動作,而無需人工的干預。以resources目錄為例: 
src/test/resources,負責管理項目測試的資源。在使用Maven2執行test-compile之后,這個目錄中的所有文件及子目錄,會復制到target/test-classes目錄中,為后續的測試做好了准備。 
這 些動作在 Maven1 中,是需要在 maven.xml 中使用<preGoal>或<postGoal>來完成的。如今,完全不需要在pom.xml中指定就能夠自動完成。在src和 test都使用resources,方便構建和測試,這種方式本就已是前人的經驗。通過使用Maven2,使這個經驗在開發團隊中得到普及。

生命周期
在 Maven2 中有了明確的生命周期概念,而且都提供與之對應的命令,使得項目構建更加清晰明了。主要的生命周期階段:
如 果要執行項目編譯,那么直接輸入:mvn compile即可,對於其他的階段可以類推。階段之間是存在依賴關系(dependency)的,如test依賴test-compile。在執行 mvn test時,會先運行mvn test-compile,然后才是mvn test。當然,開發中,我們一般都不會直接操作 Maven 的。而是在 Eclipse 中使用 Maven 插件,其中用的最多的命令就是 clean 、compile 、install 、deploy 等。

依賴
說完生命周期,還有一個必須要說的就是依賴管理了。Maven 中是通過在 pom.xml 中添加依賴從而來引入 jar 包的。其原理是:每一個 jar 都會有獨立的坐標,Maven 就是通過坐標來定位到具體的 jar 的。
就 好像平面坐標系一樣,通過 x 軸 和 y 軸定位一個坐標點。Maven 定義了這樣一組規則:世界上任何一個構件都可以使用 Maven 坐標唯一標識,Maven 坐標的元素包括 groupId 、artifactId 、version 、packaging 、classifier 。只要我們提供正確的坐標元素,Maven 就能夠找到它。

建議
有 的人可能會有疑問,以前沒有 Maven 的時候,我們可以去各自的官網下載 jar,但現在只能通過 pom 引用 jar。那么如何知道需要添加哪些依賴呢?還有需要什么版本呢?這也是為什么有一部分習慣了自己下載 jar,而到了 Maven 這不知道該怎么用了。
當 然,Maven 還不是智能的,你不可能直接命令 Maven 直接給你找項目所需要的各種組件,或許以后這樣的智能化的軟件管理工具會出現,至少現在還沒有。因此,還得需要你自己去添加 pom 依賴。至於該如何找,這里我告訴大家一個方法,雖然方法有點笨,但或許對你快速定位到具體組件有所幫助。
舉個例子,假如現在需要添加 Hibernate 的依賴,但具體哪個版本呢,可以先不用管,直接去 Baidu 或者 Google,以“ maven spring  repository ”為關鍵字搜索,往往第一個鏈接中,就是你需要的方案。






當然,這只是一種方法,只針對剛接觸 Maven 的童鞋們。隨着項目經驗的增多,以后你就會越來越發現,Maven 解放的不僅僅是你的雙手,還有你最寶貴的時間。

 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM