再遇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包版本的问题耽误这么多功夫,我觉得实在不应该。既然大家是协同工作的,在各自版本升级的过程中,为什么就不能协调一下呢?可能是缺乏这样的国际组织,又或是其它?在此轻声的呼吁一小下下,嘎嘎。





     本文转自NightWolves 51CTO博客,原文链接: http://blog.51cto.com/yangfei520/309119 ,如需转载请自行联系原作者

相关文章
|
存储 Java API
ASM 关键接口 MethodVisitor
ASM 关键接口 MethodVisitor
427 0
ASM 关键接口 MethodVisitor
|
SQL 数据库
ASM卷加盘
1.登陆服务器 2.登陆到ASM实例su - grid sqlplus '/as sysasm' SQL> SELECT path FROM v$asm_disk WHERE NAME IS NULL; PATH /dev/rdsk/c0t60060E8007C72E000030C72E0000...
842 0
|
Oracle 关系型数据库 网络架构
asm 状态INTERMEDIATE
asm INTERMEDIATE,asm 磁盘中状态显示INTERMEDIATE。
3188 0
|
存储 Oracle 网络协议
|
SQL Web App开发 数据库
|
关系型数据库 Unix Oracle
|
SQL 测试技术 数据库
|
存储 Oracle 关系型数据库
|
存储 Oracle 关系型数据库
【ASM】ASMLIB 系列
【ASM】ASMLIB 系列 使用ASMLIB管理磁盘 在存储管理员给服务器提供磁盘设备后,它们对于服务器来说是可用的并且可以在Linux系统中 的/proc/partitions虚拟文件中可以看到。
2661 0