0

私の職場には、build.xml ファイルを使用して JAR としてエクスポートされる Eclipse Java プロジェクトがあります。

jar は正常にハードディスクに書き出されていますが、それを機能させるには、jar のすべての内容を jar があるフォルダーに抽出し、それをダブルクリックして作成する必要があることがわかりました。走る。

元 :

Jar の場所: C:\MyTestFolder\App.jar

すべてのコンテンツを C:\MyTestFolder に解凍し、JAR をダブルクリックして正常に実行する必要があります。

それ以外の場合、jar を直接ダブルクリックしても何も起こりません。

コマンド プロンプトから jar を呼び出すと、次のエラーが表示されます。

Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: org/apache/log4j/Logger


        at application.MainView.<init>(MainView.java:49)
        at application.MainView$1.run(MainView.java:65)
        at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Logger
        at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
        ... 14 more

このエラーは、クラスパス (MANIFEST.MF ファイル内) に log4j があるにもかかわらず発生します。同じ解決策を知りたいです。前もって感謝します。

4

1 に答える 1

0

jar がクラスパスで依存する jar を見つけることができないようです。

メイン jar のマニフェスト ファイルにすべての依存 jar ファイルのパスを追加する必要があります。

その後、コンテンツを抽出せずに jar ファイルを実行できるようになります。

于 2013-06-26T10:34:29.967 に答える