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

Jarの代わりにEclipseから実行可能なJarをエクスポートすることで問題を解決しました。

于 2016-04-22T08:44:59.500 に答える