以前遇到過這個(gè)問題,今天再次遇到,又有了點(diǎn)新的收獲。還是先看看問題吧,在SSH項(xiàng)目中,啟動(dòng)tomcat時(shí)報(bào)錯(cuò):
嚴(yán)重: 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) 記得以前遇到過這個(gè)問題,當(dāng)時(shí)就把我折騰得夠嗆。后來,發(fā)現(xiàn)了問題的所在(由于Spring中的“asm-2.2.3.jar”和Hibernate中的“asm.jar”包沖突),也就很容易就解決了(移除Spring AOP Libraries中的“asm-2.2.3.jar”即可)。由于當(dāng)時(shí)使用的是我自建的User Libraries類庫(kù),所以操作上很簡(jiǎn)單,Window-->Preferences-->Java-->Build Path-->User Libraries-->找到自己建的spring庫(kù)中的asm-2.2.3.jar,"remove"掉即可。
可是幾天我使用的是myeclipse自帶的類庫(kù),怎么能隨便編輯IDE自帶的類庫(kù)呢?!開始我覺得不太現(xiàn)實(shí),可最終試出了一個(gè)辦法,還真能辦到:myeclipse-->Preferences-->MyEclipse EnterpriseWorkbench-->Project Capabilities-->Spring-->Spring2.5-->Spring2.5 AOP Libraries-->找到asm-2.2.3.jar,"remove"掉。本來很得意,可重啟了tomcat發(fā)現(xiàn)問題依舊!我又把spring的asm-2.2.3.jar添加上,而把hibernate的asm.jar去掉,問題依舊!
最后,翻了半天資料,原來是cglib包要用到asm包,我發(fā)現(xiàn)spring2.5 AOP Libraries里有個(gè)cglib-nodep-2.1_3.jar和hibernate3.2 Core Libraries里都有個(gè)cglib-2.1.3.jar,問題的根肯定是cglib和asm的版本對(duì)應(yīng)上,而不只在asm!于是,我把hibernate中所有和cglib,asm有關(guān)的三個(gè)包asm.jar,asm-attrs.jar,cglib-2.1.3.jar都"remove"掉,而只保留spring中的這些包。重啟tomcat,問題解決!
當(dāng)然,知道了問題的所在,解決途徑可能不唯一,不過關(guān)于SSH包版本的問題耽誤這么多功夫,我覺得實(shí)在不應(yīng)該。既然大家是協(xié)同工作的,在各自版本升級(jí)的過程中,為什么就不能協(xié)調(diào)一下呢?可能是缺乏這樣的國(guó)際組織,又或是其它?在此輕聲的呼吁一小下下,嘎嘎。
|
|