利用Maven進行開發過程管理
小明作為一個新進開發人員,進入了 職業生涯的第一個軟件項目,平日學習的開發技術就可以派上用場了。整個項目組在合作過程結果碰到了許多問題:
1. 小明從SVN拉下分支,準備開發環境導入,結果失敗。發現自己用的開發環境和公司的環境不同。
2. 小明運行寫好的程序,結果發現數據庫無法連接,找了許多配置文件后,發現原來是自己的某個配置項有問題。
3. 整體單元測試,情況無法生成報告,觀察整體項目情況。
4. 小明在更新別人的許多代碼后,發現程序起不來了,定位問題花了很長時間。
5. 小明的程序明明改了,可結果就是跟沒改前一樣。確實程序都發布了啊,后來發現程序依賴了一個jar包的兩個版本,而之前的版本先被加載了。
6. 檢驗代碼風格,規范遵循花了很長時間,且有漏網的。
二、 基本概念
Maven是一個項目管理的工具。它對制件和制件間的依賴進行了管理,并使用內置定義生命周期來明確項目管理的階段,同時提供了在各階段插入插件的框架。
1 生命周期管理:
|概念:
1.生命周期(lifecycle): 對于軟件開發過程做了抽象,將其分成不同階段。在不同階段調用綁定的插件來解決特定的問題。
2. 插件(plugin):對于過程中需要做的功能集合。比如驗證文件布局,文件樣式;生成覆蓋率報告;打包等。
3. 目標(goal):開發過程中需要做的功能。例如打包等。
l 目標:
開發經理可裁剪需要的生命周期,并將生命周期內需要做的功能如打包,生成報告,項目規范的檢驗等通過插件實現,并綁定到相應的階段。在不同的地點,讓其生命周期重演來確保開發過程與要求的一致性以及結果的可重演性。
其核心是維持了生命周期(Project Lifecycle),并且在周期中根據POM配置可調用相應的可配置插件來實施個階段需要做的工作,且運行周期目標時,會調用其先周期綁定的目標。
2 依賴管理:
l 概念:
1. 構件(Artifact):構件是對一個重用單元的抽象。在java中可以是jar包,war包;在c++中可以是dll等。在maven中每一個構件(artifact)都有唯一標識,由groupId,artifactId ,version三要素組成。
2. 依賴(dependency):構件需要另一個構件才能進行操作的一種關系。一個構件的所有依賴通過pom文件的dependency節點來說明。
l 目標:
在運行時掃描pom并得到相應的依賴,然后對每一個依賴的制件的依賴再做提取,最后形成一顆依賴樹。
l 解決的問題:
增加重用性:將可以重用部分的代碼做成制件,增加重用度,減少耦合,降低維護成本。
發現循環依賴:循環依賴會造成無法重用處在循環依賴中的任意制件,并造成局部問題的擴大化。
解決jar hell問題:發現依賴樹中同時依賴了一個制件的不同版本。對于java而言,兩個jar包的同一全名的類只會加載一個,造成運行結果和預期結果的差異,使用其結構可以提前發現并解決。
原文鏈接:http://www.cnblogs.com/jinspire/archive/2011/10/17/2214554.html
【編輯推薦】