我正在开发一个 java 项目,该项目直到几天前才开始工作。我不确定我对 Eclipse 设置做了什么来控制它,但现在当我尝试运行一些访问 google Finance api 的代码时,我收到了 java.lang.ClassNotFoundException 。我已经构建了一个小型测试应用程序,它单独使用 google Finance 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
有帮助吗?

解决方案

看来你的项目的类路径缺乏google-collect-1.0-rc1.jar

您显然有它的硬盘驱动器,只需编辑项目类路径,并将其添加有(或确保它得到Maven的添加/例如,如果你使用它们)。

其他提示

您将要意识到两个类似的错误消息之间的差的。我建议你阅读桑吉夫Jivan美妙的文章“的ClassNotFoundException和NoClassDefFoundError的区别”。 http://www.jroller.com/sjivan/entry/difference_between_classnotfoundexception_and_noclassdeffounderror

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top