神秘的NoSuchMethodError&它不能是类路径......可以吗?

时间:2011-06-13 19:42:55

标签: eclipse java-ee

我一直在与这个bug争斗3个小时。 我已经检查了构建路径和类路径,它们是相同的,这是一个非常大的webapp,运行在Tomcat& Geronimo,它有一个每个组件的构建文件&然后一个主要的一个将它们绑在一起,但我已经超过了ant构建文件&将它们与依赖第三方库的工作组件中的其他组件进行比较,我没有看到差异。

<fileset dir="${home.dir}/component/lib" includes="*.jar"/>

一切似乎都井然有序。 如果我从JUnit测试中调用此方法,从eclipse中运行,则传递没有问题,如果我运行服务器,我会得到此异常。

此外,我还有两个其他库,这个组件使用&amp;我刚刚将其添加为eclipse&amp;中的用户库。在build.xml中引用的组件库中,它没有问题。当逻辑似乎使我失败时,我已经尝试过移动罐子来试验和错误。没有运气了。

为了让事情变得更加陌生,我现在还记得,我自己写了一些代码,我自己写的这个代码甚至不在库中。 java.lang.NoSuchMethodError,因为eclipse偶尔会做随机的事情,我只是更改了方法名称并做了一个干净的&amp;它奏效了。

我已经多次尝试清理和重建整个网络应用程序而没有任何变化。

我想了解一些关于如何更接近问题的建议,以便我可以尝试找到错误,除了构建文件之外,除了构建文件之外,其他任何地方都会出现调试类路径问题吗?

任何有关如何确定问题的建议都将受到赞赏。

Exception: java.lang.NoSuchMethodError [java] Message: com.google.common.collect.ImmutableMultimap.of()Lcom/google/common/collect/ImmutableMultimap; [java] ---- stack trace --------------------------------------------------------------- [java] java.lang.NoSuchMethodError: com.google.common.collect.ImmutableMultimap.of()Lcom/google/common/collect/ImmutableMultimap; [java] com.google.gdata.util.common.net.UriParameterMap.<clinit>(UriParameterMap.java:78) [java] com.google.gdata.client.Service.computeQueryMap(Service.java:2190) [java] com.google.gdata.client.Service.access$000(Service.java:94) [java] com.google.gdata.client.Service$ClientStreamProperties.<init>(Service.java:1839) [java] com.google.gdata.client.Service$ClientOutputProperties.<init>(Service.java:1986) [java] com.google.gdata.client.Service.writeRequestData(Service.java:2029) [java] com.google.gdata.client.Service.insert(Service.java:1408) [java] com.google.gdata.client.GoogleService.insert(GoogleService.java:599) [java] com.google.gdata.client.appsforyourdomain.AppsForYourDomainService.insert(AppsForYourDomainService.java:100) [java] za.co.venturenet.api.googleapps.GoogleAppsServices.createUser(GoogleAppsServices.java:437) [java] za.co.venturenet.api.googleapps.GoogleAppsServices.createUser(GoogleAppsServices.java:336) [java] za.co.venturenet.api.googleapps.GoogleAppsFacade.createNewVenturenetUser(GoogleAppsFacade.java:158)

2 个答案:

答案 0 :(得分:2)

NoSuchMethodError意味着找到了类,但找不到该类中的引用方法。最典型的原因是访问错误版本的类/库。由于您的问题仅在服务器上运行时出现,我会查看您服务器的配置。也许这个库的不同版本连接到服务器的系统类加载器(它将领先于你的webapp中捆绑的任何东西)。

答案 1 :(得分:0)

&gt;因为eclipse偶尔会做随机的事情,我只是更改了方法名称并做了一个干净的&amp;它起作用了。

我遇到了同样的错误,并尝试了相同的解决方案:更改方法名称,或者在java文件中添加一个空行,重建。它通常可以工作一次。但是在第二个服务器启动时,NoSuchMethodError将返回相同的方法标识符。

我的eclipse环境构建了一个“target / classes”文件夹,它获取了web-inf类的副本。 删除该文件夹似乎已经解决了随机NoSuchMethodError的问题,这可能是由于无法解决要加载的实例而引起的。

您的里程可能会有所不同。