在原有项目中添加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.1、Spring2.5.2、Hibernate3.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的低版本存在,系统默认去其中寻找。
于是在Tomcat的lib中找commons-collections,没有。
会在哪里呢?
是不是在MyEclipse中的Hibernate、Spring、Struts中有低版本的commons-collections呢?
于是在MyEclipse界面,Window->Preferences…->MyEclipse->Project Capabilities下(如图二所示)的Hibernate、Spring、Struts中去找,一一删除了所有的commons-collections包。结果还是报错。
图二
于是重建一个空项目,只加quartz-1.6.0libcore下的包到项目中,运行example,不报错。确定了原Quartz实例没问题。
难道就是Hibernate、Spring、Struts中某个包的问题。排除法。
依次去掉Hibernate、Spring、Struts,没去掉一个,运行一次,还是报错。排除是有三者引起的错误。
会不会是其他包引起的,继续排除法:
去掉有关DWR的包,还是报错。
去掉所有a开头的包(打算按字母顺序来排除),报错。
到去掉所有c开头的时,报错变了,是必定了,应为没log包commons-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.jar在commons-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 Down包commons-collections-3.1.jar的顺序,每调整一次,执行一次,直到找到在正确与错误的分界位置,以找到问题包。
所以解决的办法就一句话:
让包commons-collections-3.1.jar先于其他所有包被读取即可。调整Properties->Java Build Path->Order and Export到如图五所示状态即可。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/8271432/viewspace-1002329/ ,如需转载,请注明出处,否则将追究法律责任。