两台机器,一模一样的操作系统,一模一样的JDK,一模一样的Eclipse,一模一样的POM文件,一模一样的代码,但是一台机器运行正常,另一台机器却提示如下错误:
java.util.ServiceConfigurationError: org.jclouds.apis.ApiMetadata: Provider org.jclouds.openstack.keystone.v2_0.KeystoneApiMetadata could not be instantiated
at java.util.ServiceLoader.fail(Unknown Source)
……
Caused by: java.lang.NoClassDefFoundError: com/google/common/base/Objects$ToStringHelper
查看Eclipse编译路径,发现存在guava 22.0版本,显然这是版本升级导致的问题,必须要切换架包才能解决问题,所以应该所有的机器都无法正常运行才对,但为什么他的机器运行正常呢?
再次核对POM文件,确实一模一样;
核对调用的代码,依然是一模一样;
继续核对编译路径,发现引入的架包也一模一样;
继续检查编译路径,切换到编译路径中的项目标签,突然发现了异常,如下图所示:
原来如此!切换到引入的项目,发现此项目中引入了guava 16.0版本,排除引入的项目,最后所有的机器终于都报错了!
追问为何引入此项目的原因,回答是按Eclipse提示的错误,就随手一点,呵呵,这随手一点,就产生了灵异现象。
结论
在实际的运作中,我们经常发现,一台机器运行正常的代码,切换到其他机器就发生灵异现象,无法正常运行,但只要仔细排除问题,终究能找到问题的根源。