记录一下Maven 1升级到Maven 2、Hibernate 2.1升级到Hibernate 3的一些注意事项,^_^,以备后用,毕竟以前的系统很多都是基于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等等的东西,其实仔细看会发现这里面的很多东西其实它都是调用maven 2插件时的一些属性描述,这样其实就不难理解,以前在maven 1中这部分都放入project.properties,Maven 2里面最好的一点就是增强了Maven 1里面的pom.xml的继承的支持,这个比以前强多了,以前Maven 1中工程的继承其实作用不是非常明显,在现在Maven 2中就非常明显了,继承了父的pom.xml后当前的这个pom.xml编写起来可能就变得非常简单了,^_^,最后说说让Maven 1用户迷惑的maven.xml的问题,在maven 2中均通过插件的方式来形成project的集成脚本,maven 2本身提供了非常多的集成插件,象clean、install等等,可以在执行maven时通过这样的方式来调用多个插件:mvn clean install,如果maven提供的插件无法满足的话,只能是自己写了,现在写插件可没以前那么简单了,因为在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而言的优缺点:
优点:
1、Dependency的管理上;
2、多工程的继承上。
缺点:
1、脚本编写上,现在必须依靠写插件来完成了,^_^,或者采用调用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中就不能这么做了,就需要改变为CLOB clob=(CLOB)((SerializableClob)info.getContent()).getWrappedClob();
9、session.find、session.iterator等方法被废弃了,要改为采用Query来获取。
在Maven、Hibernate升级过程中基本碰到的是些这样的问题,^_^,稍做总结,Maven的升级带来的甚至是思想方面的改变,Hibernate的升级则显得更为简单一点,当然,有些东西还是需要深入学习的。