2009-07-02 14 views
0

Ich habe ein JAR mit IntelliJ erstellt und die Hauptklasse richtig gesetzt.NoClassDefFound beim Ausführen eines Jars

Wenn ich "java -jar foo.jar" über die Befehlszeile (Windows) ausführen, bekomme ich eine Ausnahme, die behauptet, dass die Hauptdatei fehlt. Die Hauptklasse sieht ungefähr so ​​aus:

package mypackage; 

public class LockUtil { 
    public static void main(String[] args) { 
    ... 

ich die folgende Ausnahme erhalten:

Exception in thread "main" java.lang.NoClassDefFoundError: mypackage/LockUtil 
Caused by: java.lang.ClassNotFoundException: mypackage.LockUtil 
     at java.net.URLClassLoader$1.run(Unknown Source) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(Unknown Source) 
     at java.lang.ClassLoader.loadClass(Unknown Source) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
     at java.lang.ClassLoader.loadClass(Unknown Source) 
     at java.lang.ClassLoader.loadClassInternal(Unknown Source) 
Could not find the main class: mypackage.LockUtil. Program will exit. 

Die Manifest-Datei enthält:

Manifest-Version: 1.0 
Created-By: IntelliJ IDEA 
Main-Class: mypackage.LockUtil 

Und das Glas enthält die entsprechende Verzeichnisstruktur mit die .class-Datei.

Antwort

1

Sie versuchen mypackage.LockUtil auszuführen, aber Sie sollten mypackage.locking.LockUtil verwenden (am Anfang der Klasse beachten Sie die package Aussage.).

Eine andere Möglichkeit ist, dass Sie die Klasse verschoben haben und die Aktualisierung die package Anweisung vergessen haben.

+0

Entschuldigung, es war ein Fehler beim Posting - der tatsächliche Paketname ist jedoch korrekt ... (Ich habe die Frage aktualisiert) – ripper234

0

Es scheint, dass der Name des Pakets ist mypackage.locking und nicht nur mypackage

0

Es scheint, dass Ihre Hauptklassendefinition in Ihrem Manifest zeigt auf mypackage/LockUtil statt mypackage/Verriegelungs-/LockUtil.

-Rick

2

Wenn Sie das tun java -tf foo.jar, tun Sie etwas sehen?

META-INF/ 
META-INF/MANIFEST.MF 
mypackage/ 
mypackage/LockUtil.class 

Könnte es sein, dass dort irgendwo eine andere Verzeichnisebene ist?

können Sie sicher sein, dass Java die Hauptdatei kennt, ist es durch den Bau der JAR-Datei mit etwas wie folgt aus:

jar cfe foo.jar mypackage.LockUtil mypackage/LockUtil.class 
1

Does LockUtil haben eine Abhängigkeit von einer anderen Klasse, die nicht auflösbar ist, wodurch nicht erlaubt LockUtil Laden?

Verwandte Themen