4

我正在使用网站管理员工具 Java api V3 来查询数据,我的代码在 Eclipse 中工作正常,但是当我将它导出到 Jar 时出现以下错误

Exception in thread "main" java.lang.NoClassDefFoundError: com.google.api.client.http.HttpTransport
    at java.lang.J9VMInternals.prepareClassImpl(Native Method)
    at java.lang.J9VMInternals.prepare(J9VMInternals.java:430)
    at java.lang.Class.getMethod(Class.java:1061)
    at sun.launcher.LauncherHelper.getMainMethod(LauncherHelper.java:506)
    at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:498)
Caused by: java.lang.ClassNotFoundException: com.google.api.client.http.HttpTransport
        at java.net.URLClassLoader.findClass(URLClassLoader.java:665)
        at java.lang.ClassLoader.loadClassHelper(ClassLoader.java:942)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:851)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:82

我的依赖如下

在此处输入图像描述

在此处输入图像描述

我正在用 Java6 编译和导出 jar 并使用 Java7 执行它。

我认为这是一个依赖问题,但我不知道如何解决它?尤其是它在 Eclipse 中工作,但是当我从 Eclipse 导出 jar 时保持默认配置并选择我得到的主类NoClassDefFoundError,任何想法都提前谢谢你。

4

2 回答 2

2

当类 com.google.api.client.http.HttpTransport在编译期间可用但运行时不可用时,您将收到此错误。

Eclipse 会自动将构建类路径上的 jar 文件添加到运行时配置的类路径中。因此,当您从 Eclipse 运行时,您不会得到异常。

我假设您正在从命令行运行,如下所示: java -cp myjarfile.jar com.my.Main

如果是这种情况,则类路径缺少 Eclipse 中配置的依赖项。为了解决这个问题,将它们中的每一个附加如下: java -cp myjarfile.jar;commons-logging-1.1.1.jar;etc... com.my.Main

请注意,类路径中的分号;用于 Windows。:在 Linux 上使用冒号。

更新 使用可运行的 jar 文件时,请确保在清单文件中正确设置了类路径。

https://docs.oracle.com/javase/tutorial/deployment/jar/appman.html https://docs.oracle.com/javase/tutorial/deployment/jar/downman.html

于 2016-04-21T11:19:49.243 回答
0

我通过从 eclipse 而不是 Jar 导出可运行 Jar 解决了这个问题。

于 2016-04-22T08:44:59.500 回答