# Main-Klasse wird beim Aufruf des JARs nicht gefunden



## Novanic (4. Nov 2007)

Hi Leute,

ich hasse es!!! Jeeeeedes mal das Gleiche! Ich will mir einfach nur schnell ein JAR bauen und es ausführen. Das JAR wird inklusive Manifest-Datei mit einem Ant-Skript erstellt. Im Endeffekt sitz ich jetzt wieder den halben Tag daran und es will einfach nicht funktionieren!

Egal wie ich das JAR ausführen möchte, es erscheint auf der Kommandozeile immer die folgende Ausgabe:

"Exception in thread "main" java.lang.NoClassDefFoundError: de/novanic/foobar/Main"

Die Main-Klasse wird also nicht gefunden. Wie kann das sein?


Versuch 1: java -jar foobar.jar

Versuch 2: java -classpath .;foobar de.novanic.foobar.Main

Versuch 3: java -classpath .;foobar.jar de.novanic.foobar.Main

Versuch 4: java -cp .;foobar -jar foobar.jar

Versuch 5: java -cp .;foobar.jar -jar foobar.jar

Mehr Versuche zum Aufrufen eines JARs fallen mir nicht ein...


Das Manifest sieht wie folgt aus:

  Manifest-Version: 1.0
  Ant-Version: Apache Ant 1.7.0
  Created-By: 1.6.0-b105 (Sun Microsystems Inc.)
  Main-Class: de.novanic.foobar.Main

Und das JAR-Archiv hat folgende Struktur:

  META-INF\MANIFEST.MF
  de\novanic\foobar\Main.class

Sieht jemand einen Fehler? Oder was könnte ich noch probieren?

Danke schonmal im Voraus!

Gruß Nova


----------



## Guest (4. Nov 2007)

Ist die Klasse in der Jar-Datei drin? 
Hast du nicht versehentlich ein Verzeichnis zu viel in die Jar Datei verpackt. z.B. classes/de/... usw.?


----------



## Novanic (4. Nov 2007)

Nein, die Klasse (class-Datei) ist richtig drin, wenn ich das JAR mit WinRAR öffne, sehe ich direkt den Ordner "META-INF" und den Ordner "de"...


----------



## Guest (4. Nov 2007)

Novanic hat gesagt.:
			
		

> Nein, die Klasse (class-Datei) ist richtig drin, wenn ich das JAR mit WinRAR öffne, sehe ich direkt den Ordner "META-INF" und den Ordner "de"...


OK, ich gehe auch davon aus, dass die Klasse Main darin enthalten ist. Was ist mit dem Aufruf (Beachte das Semikolon nach der Jar-Datei)?:

java -cp .;foobar.jar*;* de.novanic.foobar.Main

Ich gehe davon aus, du führst es unter Windows aus. Unter Linux Doppelpunkt statt Semikolon verwenden.


----------



## Wildcard (4. Nov 2007)

-cp wird ignoriert und durch den Class-Path im Manifest ersetzt.


----------



## Novanic (4. Nov 2007)

Danke Wildcard, das hab ich jetzt auch gerade herausgefunden und das war auch der Fehler.
In der Manifest stand ein falsch formatierter class-path. Ich hab jetzt einfach die Classpath-Generierung ausgeschaltet und danach lief es. Was für ein Schrott... Es wurde noch nichtmal die Main-Klasse gefunden, die ich explizit mit angegeben habe...

Danke für die Hilfe.

Gruß Nova


----------



## Gast (4. Nov 2007)

was ist denn an der manifest datei von oben falsch formatiert?


----------



## Murray (5. Nov 2007)

Novanic hat gesagt.:
			
		

> In der Manifest stand ein falsch formatierter class-path. Ich hab jetzt einfach die Classpath-Generierung ausgeschaltet und danach lief es. Was für ein Schrott... Es wurde noch nichtmal die Main-Klasse gefunden, die ich explizit mit angegeben habe...


Selbst dann hätte Variante 3  funktionieren müssen - zumindest dann, wenn der Aufruf aus dem Verzeichnis erfolgt ist, in dem das Jar-File lag.


----------



## Novanic (5. Nov 2007)

Hm, also den Classpath hatte ich oben im Manifest weggelassen, weil ich davon ausgegangen bin dass der Classpath genommen wird den ich explizit angegeben habe. Die Main-Klasse hätte der Java-Interpreter aber trotzdem finden müssen, da es sich ja nur um ein Jar gehandelt hat, dass ich auch direkt aus dem gleichen Ordner aufgerufen habe. Warscheinlich war die Mainfest-Datei irgendwie ungültig, durch den falsch formatierten Classpath...


----------

