3

我有一个我正在处理的 java 项目,直到几天前才开始工作。我不确定我对我的 Eclipse 设置做了什么来软管它,但现在当我尝试运行一些访问谷歌金融 api 的代码时,我得到了一个 java.lang.ClassNotFoundException。我已经构建了一个小型测试应用程序,它自己使用谷歌金融 api,这似乎工作。所以,我认为这是一个项目特定的问题。任何帮助将不胜感激。这是堆栈跟踪:

ptolemy.kernel.util.IllegalActionException:   in .RandomSearch.manager
Because:
com/google/common/collect/Maps
 at ptolemy.actor.Manager.execute(Manager.java:472)
 at ptolemy.actor.Manager.run(Manager.java:1119)
 at ptolemy.actor.Manager$3.run(Manager.java:1160)
Caused by: java.lang.NoClassDefFoundError: com/google/common/collect/Maps
 at com.google.gdata.wireformats.AltRegistry.<init>(AltRegistry.java:118)
 at com.google.gdata.wireformats.AltRegistry.<init>(AltRegistry.java:100)
 at com.google.gdata.client.Service.<clinit>(Service.java:546)
 at AtomicBroadcast.GoogleFinance.GooglePortfolioReader.fire(GooglePortfolioReader.java:108)
 at ptolemy.domains.de.kernel.DEDirector.fire(DEDirector.java:568)
 at ptolemy.actor.CompositeActor.fire(CompositeActor.java:458)
 at ptolemy.actor.Manager.iterate(Manager.java:714)
 at ptolemy.actor.Manager.execute(Manager.java:349)
 ... 2 more
Caused by: java.lang.ClassNotFoundException: com.google.common.collect.Maps
 at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
 at java.security.AccessController.doPrivileged(Native Method)
 at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:319)
 at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:264)
 at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:332)
 ... 10 more
Caused by: java.lang.NoClassDefFoundError: com/google/common/collect/Maps
 at com.google.gdata.wireformats.AltRegistry.<init>(AltRegistry.java:118)
 at com.google.gdata.wireformats.AltRegistry.<init>(AltRegistry.java:100)
 at com.google.gdata.client.Service.<clinit>(Service.java:546)
 at AtomicBroadcast.GoogleFinance.GooglePortfolioReader.fire(GooglePortfolioReader.java:108)
 at ptolemy.domains.de.kernel.DEDirector.fire(DEDirector.java:568)
 at ptolemy.actor.CompositeActor.fire(CompositeActor.java:458)
 at ptolemy.actor.Manager.iterate(Manager.java:714)
 at ptolemy.actor.Manager.execute(Manager.java:349)
 at ptolemy.actor.Manager.run(Manager.java:1119)
 at ptolemy.actor.Manager$3.run(Manager.java:1160)
Caused by: java.lang.ClassNotFoundException: com.google.common.collect.Maps
 at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
 at java.security.AccessController.doPrivileged(Native Method)
 at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:319)
 at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:264)
 at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:332)
 ... 10 more
4

3 回答 3

4

您的项目类路径似乎缺少google-collect-1.0-rc1.jar

您显然将它放在硬盘上,只需编辑项目类路径并将其添加到那里(或确保它由 Maven 添加/如果您使用它们)。

于 2010-06-10T04:56:44.283 回答
1

您必须注意两个类似错误消息之间的区别。我建议您阅读 Sanjiv Jivan 的精彩文章“ClassNotFoundException 和 NoClassDefFoundError 之间的区别”。 http://www.jroller.com/sjivan/entry/difference_between_classnotfoundexception_and_noclassdeffounderror

于 2010-06-11T08:37:27.887 回答
1

我遇到了类似的问题。我没有google-collect-1.0-rc1.jar在 gdata api 中找到。但是这个线程解决了我的问题:

  • 将 guava.xxx.jar 添加到您的项目中。Guava是旧 Google Collections Library 的完全兼容的超集。
  • 您可以在 gdata-samples/java/deps/guava.xxxx.jar 中找到 guava-xxxx.jar。或者从这里下载。

Google 推荐 Guava 而不是 google-collect-1.0.jar。看这里

于 2012-12-22T21:51:43.970 回答