Quartz 整合到SSH時找不到方法SetUtils.orderedSet錯誤解決辦法

xuniji123發表於2008-04-11

在原有專案中新增Quartz1.6時總報錯如下(如圖一所示):

java.lang.NoSuchMethodError: org.apache.commons.collections.SetUtils.orderedSet(Ljava/util/Set;)Ljava/util/Set;

原系統是整合Struts2.0.11.1+Spring2.5.2+Hibernate3.2.6GA,在MyEclipse5.5GA下開發的,整合了DWR2.0.3

[@more@]

Quartz 整合到SSH時找不到方法SetUtils.orderedSet錯誤解決辦法

在原有專案中新增Quartz1.6時總報錯如下(如圖一所示):

java.lang.NoSuchMethodError: org.apache.commons.collections.SetUtils.orderedSet(Ljava/util/Set;)Ljava/util/Set;

原系統是整合Struts2.0.11.1+Spring2.5.2+Hibernate3.2.6GA,在MyEclipse5.5GA下開發的,整合了DWR2.0.3

圖一

問題原因:

不能找到方法org.apache.commons.collections.SetUtils.orderedSet,是由於整合Struts2.0.11.1Spring2.5.2Hibernate3.2.6GA時,加入的包是commons-collections-2.1.1.jar,該包的確不含此方法。

解決辦法:

加入比較新的包commons-collections-3.1.jar,此包在下載的quartz-1.6.0libcore下能找到。

即使這樣也還是報同樣的錯。

於是我將之前的commons-collections-2.1.1.jar包刪除,只留下ommons-collections-3.1.jar,重啟Eclipse也還是報錯。

是不是執行環境中有commons-collections的低版本存在,系統預設去其中尋找。

於是在Tomcatlib中找commons-collections,沒有。

會在哪裡呢?

是不是在MyEclipse中的HibernateSpringStruts中有低版本的commons-collections呢?

於是在MyEclipse介面,Window->Preferences…->MyEclipse->Project Capabilities下(如圖二所示)的HibernateSpringStruts中去找,一一刪除了所有的commons-collections包。結果還是報錯。

圖二

於是重建一個空專案,只加quartz-1.6.0libcore下的包到專案中,執行example,不報錯。確定了原Quartz例項沒問題。

難道就是HibernateSpringStruts中某個包的問題。排除法。

依次去掉HibernateSpringStruts,沒去掉一個,執行一次,還是報錯。排除是有三者引起的錯誤。

會不會是其他包引起的,繼續排除法:

去掉有關DWR的包,還是報錯。

去掉所有a開頭的包(打算按字母順序來排除),報錯。

到去掉所有c開頭的時,報錯變了,是必定了,應為沒logcommons-logging.jar,加入,又報另外的錯,顯然還沒加commons-collections包,這次,直接只加commons-collections-3.1.jar包,執行,終於沒有報錯了。

在反過來依次加入之前刪除的包,看究竟是加什麼包時出錯。

加入所有之前c開頭的包,包括commons-collections-2.1.1.jar,沒有錯。

加入a開頭的所有包,沒錯。

一直把原先的所有包都加回去了,都沒報錯。奇怪了。

難道跟加包的順序有關?

於是儲存了現在的lib包。

將以前專案的lib(不包含quartz-1.6.0libcore下的包)包重新考到現在的專案。再把quartz-1.6.0libcore下的包全部加入現在的專案。同樣出錯。

之前不是猜測放包的順序有關嗎?

在前面的包先讀取,後面的包後讀取。那就應該讓commons-collections-3.1.jarcommons-collections-2.1.1.jar先被取才對。

於是在專案上右鍵Properties->Java Build Path->Order and Export,整理包的先後順序。

如圖三所示,由於新加入的包commons-collections-3.1.jar在最後。

圖三

選中commons-collections-3.1.jar,點選Up,一直到超過commons-collections-2.1.1.jar

如圖四所示。

圖四

OK儲存,執行,還是報錯。

難道不是這個原因?

或者其前面還有包被先讀取?

繼續Up提升commons-collections-3.1.jar的位置。一直到如圖五所示。

圖五

已經在所有包前面了,不該有問題了吧。

OK儲存,執行,終於成功。

問題解決了。

但究竟是哪個包引起的還是不清楚,在此也不去找了,要麼再繼續遍歷所有包驗證。或者在最頂端和commons-collections-2.1.1.jar之間Up and Downcommons-collections-3.1.jar的順序,每調整一次,執行一次,直到找到在正確與錯誤的分界位置,以找到問題包。

所以解決的辦法就一句話:

讓包commons-collections-3.1.jar先於其他所有包被讀取即可。調整Properties->Java Build Path->Order and Export到如圖五所示狀態即可。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8271432/viewspace-1002329/,如需轉載,請註明出處,否則將追究法律責任。

相關文章