記錄一下Maven 1升級到Maven 2、Hibernate 2.1升級到Hibernate 3的一些注意事項,^_^,以備后用,畢竟以前的系統(tǒng)很多都是基于Maven 1和Hibernate 2.1的。
Maven 1升級到Maven 2
熟悉Maven 1的同學們剛接觸Maven 2的時候不免容易變得摸不著頭腦,確實,Maven 2對于Maven 1的用戶而言太陌生了,也許這就是apache學院派的風格吧,^_^,完全不顧用戶的感受,廢話不說了,Maven 1的用戶習慣于在編寫一個工程時編寫pom.xml、maven.xml,同時還可能會寫寫project.properties或者是build.properties,高級點的用戶會用jelly自己寫寫簡單的插件,更強的用戶的話就可以用java自己寫插件了,到了Maven 2里面呢,暈了,沒有maven.xml,那怎么對project做集成呢,集成的腳本去哪寫呢,這是造成maven 1用戶無法適從的一個部分,Maven 2的思想是以模型為核心,所以就強化了Maven 1中pom的概念,所有的東西都放入pom進行描述,這點和以前的pom差不了太多,增加了一些象assembly等等的東西,其實仔細看會發(fā)現(xiàn)這里面的很多東西其實它都是調用maven 2插件時的一些屬性描述,這樣其實就不難理解,以前在maven 1中這部分都放入project.properties,Maven 2里面最好的一點就是增強了Maven 1里面的pom.xml的繼承的支持,這個比以前強多了,以前Maven 1中工程的繼承其實作用不是非常明顯,在現(xiàn)在Maven 2中就非常明顯了,繼承了父的pom.xml后當前的這個pom.xml編寫起來可能就變得非常簡單了,^_^,最后說說讓Maven 1用戶迷惑的maven.xml的問題,在maven 2中均通過插件的方式來形成project的集成腳本,maven 2本身提供了非常多的集成插件,象clean、install等等,可以在執(zhí)行maven時通過這樣的方式來調用多個插件:mvn clean install,如果maven提供的插件無法滿足的話,只能是自己寫了,現(xiàn)在寫插件可沒以前那么簡單了,因為在maven 2中拋棄了jelly。
Maven 2中比Maven 1還有的一個改進點就是dependency的問題了,Maven 2可以通過project引用的lib相應的去尋找該lib引用的其他的lib,例如在項目中我引用了webwork.jar,那么關于webwork.jar所引用的lib則可讓maven自行去尋找,前提是webwork編寫了相應的pom.xml,maven就可以相應的通過pom.xml來得到所有引用的lib,^_^,這個倒是一個不錯的改進,不過同時對開源的東西都帶來了需要編寫符合maven 2的pom.xml的需求,否則的話只能是自己幫它寫,不過這樣的話就可以把項目的lib管理變得非常清晰和簡單了,其實這點也是eclipse中的一個改進點,在eclipse中當project A引用了一個project B時,如果project B又引用project C,這個時候如果在project A中是不能調用project C的方法的,^_^
總結Maven 2對比于Maven 1而言的優(yōu)缺點:
優(yōu)點:
1、Dependency的管理上;
2、多工程的繼承上。
缺點:
1、腳本編寫上,現(xiàn)在必須依靠寫插件來完成了,^_^,或者采用調用ant的方式來屏蔽這個缺點。
Hibernate 2.1升級到Hibernate 3
升級Hibernate沒有升級Maven那么痛苦,^_^,還是比較簡單的,只是有幾個地方稍微需要注意:
1、依照Hibernate 2.1對于lib的說明,把所有Hibernate 2.1的lib刪除;
2、依照Hibernate 3對于lib的說明,把Hibernate 3所需要的lib引入;
3、替換Hibernate的相關引用,在2.1中是net.sf.hibernate這樣的package,在3中是org.hibernate這樣的package;
4、重新生成所有的hbm.xml文件,如果以前用的是xdoclet的ant task的話,把hibernate的版本改成3.0就可以了,或許要更新下xdoclet的lib;
5、修改hibernate.cfg.xml的dtd為3.0;
6、因為在Hibernate 3中對于po默認采用的均為lazy加載方式,建議在項目中采用OSIV方式,那么就可以很簡單的解決這個問題;
7、如果使用了hibernate的cache配置,而自己同時在項目中也調用了CacheManager,那么必須把這個CacheManager改為直接調用CacheManager.getInstance(),而不是通過CacheManager.create這樣的方式,把自己在項目中使用的所有緩存的配置也放入classes下的ehcache.xml中;
8、如果使用了Clob,需要修改修改,Hibernate 3改變了Clob的方式,以前在項目中可能會使用這樣的方式:CLOB clob=(CLOB)info.getContent(); 在3中就不能這么做了,就需要改變?yōu)镃LOB clob=(CLOB)((SerializableClob)info.getContent()).getWrappedClob();
9、session.find、session.iterator等方法被廢棄了,要改為采用Query來獲取。
在Maven、Hibernate升級過程中基本碰到的是些這樣的問題,^_^,稍做總結,Maven的升級帶來的甚至是思想方面的改變,Hibernate的升級則顯得更為簡單一點,當然,有些東西還是需要深入學習的。