再遇asm问题

    以前遇到过这个问题,今天再次遇到,又有了点新的收获。还是先看看问题吧,在SSH项目中,启动tomcat时报错:
严重: Exception sending context initialized event to listener instance of class    

org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in file    

[D:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\ShoppingCart\WEB-INF\classes\applicationContext-beans.xml]:    

Invocation of init method 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
Caused by: java.lang.NoSuchMethodError: org.objectweb.asm.ClassVisitor.visit(IILjava/lang/String;Ljava/lang/String;

[Ljava/lang/String;Ljava/lang/String;)V
  at net.sf.cglib.core.ClassEmitter.begin_class(ClassEmitter.java:77)
  at net.sf.cglib.core.KeyFactory$Generator.generateClass(KeyFactory.java:173)
  at net.sf.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25)
  at net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:216)
 
    记得以前遇到过这个问题,当时就把我折腾得够呛。后来,发现了问题的所在(由于Spring中的“asm-2.2.3.jar”和Hibernate中的“asm.jar”包冲突),也就很容易就解决了(移除Spring AOP Libraries中的“asm-2.2.3.jar”即可)。由于当时使用的是我自建的User Libraries类库,所以操作上很简单, Window-->Preferences-->Java-->Build Path-->User Libraries--> 找到自己建的spring库中的asm-2.2.3.jar,"remove"掉即可。
 
   可是几天我使用的是myeclipse自带的类库,怎么能随便编辑IDE自带的类库呢?!开始我觉得不太现实,可最终试出了一个办法,还真能办到: myeclipse-->Preferences-->MyEclipse EnterpriseWorkbench-->Project Capabilities-->Spring-->Spring2.5-->Spring2.5 AOP Libraries--> 找到asm-2.2.3.jar,"remove"掉。本来很得意,可重启了tomcat发现问题依旧!我又把spring的asm-2.2.3.jar添加上,而把hibernate的asm.jar去掉,问题依旧!
 
    最后,翻了半天资料,原来是cglib包要用到asm包,我发现spring2.5 AOP Libraries里有个cglib-nodep-2.1_3.jar和hibernate3.2 Core Libraries里都有个cglib-2.1.3.jar,问题的根肯定是cglib和asm的版本对应上,而不只在asm!于是,我把hibernate中所有和cglib,asm有关的三个包asm.jar,asm-attrs.jar,cglib-2.1.3.jar都"remove"掉,而只保留spring中的这些包。重启tomcat,问题解决!
 
    当然,知道了问题的所在,解决途径可能不唯一,不过关于SSH包版本的问题耽误这么多功夫,我觉得实在不应该。既然大家是协同工作的,在各自版本升级的过程中,为什么就不能协调一下呢?可能是缺乏这样的国际组织,又或是其它?在此轻声的呼吁一小下下,嘎嘎。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值