MyEclipse下完美解决Hibernate 3.2与Spring 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"都删掉或者把属于Spring AOP 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)不就行了吗,于是我就整了一个那样的User Library,只比原装的3.2 Core少了上述几个jar(可惜我没找到能复制Library的方法,手工制作,也不算难搞,展开就能看到到底是哪些jar,一个一个加上去即可)。
  对于任何存在冲突的项目,只需要(操作一次)把原装剃掉,换上盗版的,后面的功夫就简单了,所有的事情都很顺。
  相比前面的解决方法,我个人认为使用盗版Hibernate 3.2 Core Libraries是最完美的方案。

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

你可能感兴趣的:(spring,AOP,Hibernate,MyEclipse,jar,library)