最近在公司內推薦使用maven,推薦一個落后於業內十年的技術,實在沒什么好說的,可是沒想到遇到了前所未有的阻力,總是聽到各種各樣的質疑,我就鬧不明白了,推行這個東西是為了更規范的管理項目成果,方便大家平時開發,提高自動化辦公,怎么感覺我像是賣保險的?
其實想想也不難理解,很多人都害怕改變,希望生活工作都保持現在的樣子,因為他們害怕改變帶來更多的工作,害怕因為改變可以帶來的挫敗感,另一個方面我只能狹隘的測試,就是因為人害怕你做成功了,掩蓋了他們吧,總之愛咋咋,做認為正確的事情,其他的都交給領導吧,如果領導不開眼,至少咱提升了自己的個人競爭力.
目前問題
1. jar包混亂:工程中存在jar包重復,版本不一致的情況.
2. 添加jar包隨意:需要用到第三方jar時,隨便下載就添加到項目中了,沒有記錄
3. 重復構建:每個開發人員從svn下載完代碼后,都要對項目進行配置,構建.
4. 不同環境的構建差異:總是存在在開發環境運行良好的程序,到了測試環境編譯不通過,或者不同環境的配置文件不一致,需要手動的去修改
5. 模塊間的開發依賴純手動處理:提倡模塊化的開發,可是怎么做好模塊化開發之間的依賴處理,沒有解決方案.
Maven能干什么?
依賴管理
1. 依賴范圍:<scope>test</scope>
2. 依賴性傳遞
3. 依賴調解:路徑最近者優先
4. 可選依賴
倉庫管理
對項目的成果進行管理,進行可視化的管理.
web項目與自動化部署
通過插件能夠熱部署本地或遠程服務器
持續集成
聚合和繼承
現在提倡模塊化的開發,說好的軟件應該是即插即用的,Maven的聚合特性能夠把項目的各個模塊聚合在一起構建,而繼承特性則能幫助抽取各模塊相同的依賴和插件等配置
資源過濾
常見問題:
開發,測試,生產的配置文件不一致,每次需要測試人員手動去修改,還要時刻注意更新代碼的時候,不要覆蓋了自己的修改,效率低下
那么如何解決這個呢,maven提供資源過濾功能,在編譯項目的時候就可以指定一個環境的配置文件.只需要在編譯的時候加一個參數就能解決這個問題.達到了智能適應環境差異的靈活構建.
項目站點:
1. 關於:項目描述
2. 持續集成:項目持續集成服務器信息
3. 依賴:項目依賴信息,包括傳遞性依賴,依賴圖,依賴許可證以及依賴文件的大小,所包含的類數目等.
4. 依賴管理:基於項目的依賴管理配置生成的報告.
5. 問題追蹤:項目的問題追蹤信息系統.
6. 郵件列表:項目的郵件列表信息.
7. 插件管理:項目所使用的插件的列表.
8. 項目概述:項目概述包括坐標,名稱,描述等.
站點插件
1. javaDocs:生成api文檔
2. Source Xref: 打開瀏覽器就能訪問項目的最新源代碼
3. CheckStyle:代碼規范自動檢測工具
4. PMD: 源代碼分析工具
5. ChangeLog:生成三份報告,分別為:
1. Change Log: 基於提交的變更報告,包括每次提交的日期,文件,作者,注釋等
2. Developer Activity: 基於作者的變更報告,包括作者列表以及每個作者相關的提交次數和涉及文件數目.
3. File Activity: 基於文件的變更報告,包括變更的文件列表及每個文件的變更次數.
6. Corbertura: 單元測試覆蓋率
怎么使用Maven
1.Maven 配置文件配置:
將安裝目錄下conf下的setting.xml(全局配置), 復制到{user}/.m2/ 目錄下(用戶級配置)
2.修改本地倉庫的地址:
<localRepository>D:\Maven\repository</localRepository>
3.添加私服倉庫鏡像:
<mirror>
<id>maven</id>
<name>one of the central mirrors in china</name>
<url>http://10.21.20.81:18080/nexus/content/groups/public/</url>
<mirrorOf>*</mirrorOf>
</mirror>
4.添加用戶名密碼:
<server>
<id>maven</id>
<username>ligang</username>
<password>cs123</password>
</server>
5.Pom.xml 配置快照倉庫 和 release 倉庫:
<distributionManagement>
<repository>
<id>maven</id>
<url>http://10.21.20.81:18080/nexus/content/repositories/releases/</url>
</repository>
<snapshotRepository>
<id>maven-snapshots</id>
<url>http://10.21.20.81:18080/nexus/content/repositories/snapshots/</url>
</snapshotRepository>
</distributionManagement>
6.自動化測試:mvn clean test
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running junitTest
test maven
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.011 sec
Results :
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
7.持續集成:mvn –U clean test
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running junitTest
test maven
Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 0.028 sec <<< FAILURE!
testTest(junitTest) Time elapsed: 0.014 sec <<< FAILURE!
junit.framework.ComparisonFailure: expected:<test maven[1]> but was:<test maven[]>
at junit.framework.Assert.assertEquals(Assert.java:81)
at junit.framework.Assert.assertEquals(Assert.java:87)
at junitTest.testTest(junitTest.java:12)
Results :
Failed tests: testTest(junitTest): expected:<test maven[1]> but was:<test maven[]>
Tests run: 1, Failures: 1, Errors: 0, Skipped: 0
8.發布到私服倉庫:
mvn clean deploy