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