MyEclipse下完美解决Hibernate 3.2与Spring 2.0+冲突问题


MyEclipse下完美解决Hibernate 3.2Spring 2.0+冲突问题

 

  今天发现我的Web应用程序在用MyEclipse的Deploy之后,运行的时候Spring初始化Context会出问题。无厘头的问题,会报CodeVisitor类的NoSuchMethod等等错误。
  网上搜索了一下,发现这个问题是普遍存在的,原因无非是Hibernate 3.2 Core以及Spring AOP Core两个Library集合里面有冲突,都引用了asm以及cglib,具体细节可以搜索网络获取更多,我就不罗嗦了。
  问题发现了,自然就得找解决方法,这是人之常情。
  第一个解决方法,是在每次Deploy完了之后,跑到WebApp的lib目录底下,把属于Hibernate 3.2 Core的" asm.jar""asm-attrs.jar""cglib-2.1.3.jar"都删掉或者把属于SpringAOP Core的" asm-2.2.3.jar"、"asm-commons-2.2.3.jar"、"asm-util-2.232.jar"和"cglib-nodep-2.1_3.jar"都删掉。任意删除其中一个组合都可以解决问题,不过我留意到Spring引用的jar比较新,要删就删Hibernate 3.2 Core的组合(其实我试过,直接删cglib-2.1.3.jar就OK了,原因不明)。
  第二个解决方法,也是我以前一同事整架构的时候所使用的方法,把项目引用的所有jar包全搞到项目目录中去,在里面参照第一种方法,把冲突的包去掉,把这整个目录搞成项目的Library,然后MyEclipse的构建路径里面不包含MyEclipse Libraries。
  前面两种办法都可以用,第一种办法是土方法,治标不治本,总不能每次Deploy都跑去删,搞死人,不可取;第二种方法可以说半完美了,因为可以完美Deploy&Run不会出问题,不过,这么一整,项目源代码目录就很庞大了,尤其象我这种喜欢将一个项目拆成几个项目,按不同的部分来分发进行开发的人来讲,难以接受,另外当我想将Spring从2.0升到2.5的时候,又是一段艰苦的过程。(我注:其实可以在软件里改的,汗…………)
  我仔细考虑了一下,不就是那个Libraries组合里面多了几个jar嘛,我不要不就是了,可惜我没找到如何改MyEclipse Libraries的办法,那么,我不用它的Hibernate 3.2 Core,我自己整个盗版的Hibernate 3.2 Core (Alternated)不就行了吗,于是我就整了一个那样的UserLibrary,只比原装的3.2 Core少了上述几个jar(可惜我没找到能复制Library的方法,手工制作,也不算难搞,展开就能看到到底是哪些jar,一个一个加上去即可)。
  对于任何存在冲突的项目,只需要(操作一次)把原装剃掉,换上盗版的,后面的功夫就简单了,所有的事情都很顺。
  相比前面的解决方法,我个人认为使用盗版Hibernate 3.2 Core Libraries是最完美的方案。

  嗯,使用Maven可能也是一种避免冲突的好办法,不过可能需要很仔细的控制dependence。咳咳,其实Maven我不是很熟。
  Maven…我的下一个研究目标。

 

另外贴多一篇:

SSH包冲突

一)错误提示:Error creating bean with name 'sessionFactory' defined inServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of initmethod failed; nested exception is java.lang.NoSuchMethodError:org.objectweb.asm.ClassVisitor.visit(IILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V

二)错误提示:CGLIB Enhancement failed

解决:

Spring的AOP编程时,会用到这几个lib:
asm-2.2.3.jar
asm-commons-2.2.3.jar
asm-util-2.2.3.jar
cglib-nodep-2.1_3.jar

Hibernate也包含类似的包lib:
asm.jar
asm-attrs.jar
cglib-2.1.3.jar
而导致的包冲突。

只要将hibernate用到的三个包都删掉就应该没有问题了,可是正常情况下这样是解决不了问题的,因为tomcat下已经放在webapps文件夹下的包却还没有删除,所以我们要手工删除它,找到C:/Program Files/Apache Software Foundation/Tomcat 5.5/webapps/目录下,你的项目,WEB-INF文件夹,lib文件夹,将三个包删除就ok了

 

 

 

2

SSH整合,最麻烦的就是三种框架都要导入一堆的jar包,稍有版本上的冲突,就让你中招。中招还不说,难就难在搞不清错在什么地方。

类没有错、xml文件的配置也没有错,该有的步骤都有了,可就是问题依旧........

根据各类报错信息在网上苦苦搜寻,同样的错误碰到的人还真多,但就是很少有贴出具体解决办法的,即便是有,拿来却不宜用,哎,苦~~~~(> _< )~~~~ 啊

不过呢,苍天不负有心人,苦苦寻来,歪打正着,solution终于找到~~

为了大家不在为同样的问题困扰,今天特将此现象公布出来,并给出解决方案。

原因:其实是包冲突的问题。

Spring2.0 AOP Liberaries里的asm2.2.3.jar和Hiberate中的生成代理用的asm.jar冲突

把asm2.2.3.jar , asm-util-2.2.3.jar, asm-commons-2.2.3.jar 这三个包删除就可以了。。。

 

(注:删除Hibenate的三个冲突的包即可!)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值