今天在做項(xiàng)目啟動tomcat的時(shí)候,發(fā)現(xiàn)窗口中報(bào)了如下錯(cuò)誤:
java.lang.NoClassDefFoundError: org/hibernate/cfg/HbmBinder$SecondPass
這個(gè)問題困擾了我整整一個(gè)下午,都沒查究出來~~
最后上網(wǎng)查了下,發(fā)現(xiàn)有這個(gè)問題的人還真不少,一些沒碰到過這個(gè)問題的人就說是因?yàn)檎也坏竭@個(gè)類,但是解決方法都沒有明說,這是官方hibernate+spring的問題啊,沒有類,我們怎么辦啊~
然后發(fā)現(xiàn)有的說解決方法就是下最新的hibernate-annotations.jar的包~,這確實(shí)能夠解決問題,但卻不是最根本的解決方法,這個(gè)問題其實(shí)很奇怪,關(guān)鍵就在于Junit中測試沒問題,就是發(fā)布到項(xiàng)目中的時(shí)候,會出現(xiàn)這樣的問題~也就是MyEclipse在發(fā)布項(xiàng)目文件時(shí)的問題~
于是到MyEclipse的安裝目錄中搜索hibernate-annotations.jar的包,發(fā)現(xiàn)在其中有四個(gè)hibernate-annotations.jar的包(MyEclipse6.0的版本下,5.x的不知道,可能只有三個(gè)),對比了一下他們的目錄分別是:
1.MyEclipse\eclipse\plugins\com.genuitec.org.hibernate.eclipse_......\lib\annotations --[352k]
2.MyEclipse\eclipse\plugins\com.genuitec.eclipse.springframework_......\data\2.0\lib\hibernate --[257k]
3.MyEclipse\eclipse\plugins\com.genuitec.org.hibernate.eclipse_......\myeclipse-data\3.2\lib\entitymanager --[257k]
4.MyEclipse\eclipse\plugins\com.genuitec.eclipse.springframework_......\data\1.2\lib\dependencies\hibernate --[128k]
而出錯(cuò)的就是第四個(gè)目錄下的hibernate-annotations.jar的包,一共128k大小
觀察四個(gè)包的文件大小后很明顯這個(gè)問題的原因出在Spring的版本上,由于spring2.0的版本比較新,所以更新的hinbernate包也比較新,而spirng1.2的版本中,雖然包含了hibernate3.x的版本,但是卻由于沒有及時(shí)更新其中的hibernate包,所以導(dǎo)致出現(xiàn)了這個(gè)異常bug,也不知道是因?yàn)镸yEclipse沒有及時(shí)更新spring的補(bǔ)丁版本,還是因?yàn)閟pring的工程師忽略了這個(gè)問題~,犯下了這種小錯(cuò)誤,哈哈,不過說起來也是,人無完人嘛~~
分析了問題發(fā)生的原因,最后剩下的就是這個(gè)問題的徹底解決辦法,很簡單
把搜索到的第二或者第三個(gè)文件夾中的hibernate-annotations.jar包復(fù)制到項(xiàng)目的lib目錄中覆蓋即可,當(dāng)然如果以后不想再發(fā)生這樣的問題的話那就把這個(gè)文件直接覆蓋搜索到的第四個(gè)目錄中hibernate-annotations.jar吧,這樣以后MyEclipse就再也不會發(fā)生同樣的問題了~