# Eclipse JAR Export could not find main class



## chris1519 (17. Dez 2010)

Hallo,

ich habe wohl ein grundlegendes Problem beim erstellen von JAR Dateien auf meinem PC.
Selbst ein einfaches Hello World Programm kann ich nicht richtig Exportieren.
Windows zeigt jedes mal "Could not find main class" Fehler an.
Das erzeugen von JARs klappt weder per shell nocht aus Eclipse heraus richtig.
Hat jemand eine Idee worans liegen kann?

Besten Gruß,
Chris


----------



## Haave (17. Dez 2010)

Vergisst du vielleicht, beim Eclipse-Jar-erstellen-Dialog, die Klasse herauszusuchen, in der die main()-Methode liegt?
Wenn du es auf der Shell machst, welchen Befehl verwendest du genau?


----------



## chris1519 (17. Dez 2010)

Für den Befehl hab ich mir schonmal helfen lassen, der soll so lauten:

jar cfe C:\Users\Christian\Desktop\rechner.jar Main -C C:\Users\Christian\workspace\demorun\bin .

Die Main Class wähle ich natürlich aus bei Eclipse, und die main Methode ist auch enthalten.

Anbei die Source Dateien,
wie gesagt es klappt selbst mit einem Hello World Programm nicht.


----------



## trez (17. Dez 2010)

C:\Versuche\src>jar cf HelloWorld.jar HelloWorld.java

C:\Versuche\src>dir
17.12.2010  11:54               570 HelloWorld.jar
17.12.2010  11:53               117 HelloWorld.java

C:\Versuche\src>java -jar HelloWorld.jar
Failed to load Main-Class manifest attribute from
HelloWorld.jar

Warum es das mainfest braucht weiss ich nicht - ich wüsste auch nicht was reinschreiben ;-)


----------



## Haave (17. Dez 2010)

@chris1519:
Was macht der Parameter e bei jar? Den kann ich in der manpage von jar nicht finden.


----------



## trez (17. Dez 2010)

e gibt es:

Syntax: jar {ctxui}[vfm0Me] [jar-Datei] [Manifest-Datei] [Einstiegspunkt] [-C Verzeichnis] Dateien ...
Optionen:
    -c  Neues Archiv erstellen
    -t  Inhaltsverzeichnis für Archiv auflisten
    -x  Genannte (oder alle) Dateien aus Archiv extrahieren
    -u  Vorhandenes Archiv aktualisieren
    -v  Ausf³hrliche Ausgabe für Standardausgabe erzeugen
    -f  Namen der Archivdatei angeben
    -m  Manifest-Information von angegebener Manifest-Datei einschliessen
    -e  Geben Sie einen Anwendungs-Einstiegspunkt für die in einer ausführbaren jar-Datei gebündelte eigenständige Anwendung an.
    -0  Nur speichern (keine ZIP-Komprimierung)
    -M  Keine Manifest-Datei für die Einträge erstellen
    -i  Index-Information für angegebene jar-Dateien erstellen
    -C  Zum angegebenen Verzeichnis wechseln und folgende Datei einschliessen
Falls eine Datei ein Verzeichnis ist, wird es rekursiv verarbeitet.
Der Name der Manifest-Datei, der Name der Archivdatei und der Name des Einstiegspunkts werden
in derselben Reihenfolge wie die Flags 'm', 'f' und 'e' angegeben.

Beispiel 1: So archivieren Sie zwei Klassendateien in ein Archiv mit Namen classes.jar:
       jar cvf classes.jar Foo.class Bar.class
Beispiel 2: Verwenden der vorhandenen Manifest-Datei 'mymanifest' und archivieren
           aller Dateien im Verzeichnis foo/ in 'classes.jar':
       jar cvfm classes.jar mymanifest -C foo/ .


----------



## L-ectron-X (17. Dez 2010)

chris1519 hat gesagt.:


> Für den Befehl...


Kannst du mal die FAQ besuchen: http://www.java-forum.org/spezialthemen/13787-jar-archiv-erstellen.html


----------



## Haave (17. Dez 2010)

Keine Ahnung, bei mir hat es mit Eclipse auf Anhieb funktioniert. Einfach nur das Projekt importiert, dann wieder als Jar exportiert… ???:L
Jar ist im Anhang.


----------



## trez (17. Dez 2010)

Mit Eclipse schaffe sogar ich es (meistens)

Aber auf Kommandozeile geht es nicht mal mit Anleitung

javac -cp meinclasspath (Eingabe javac -cp .) führt zu einer Fehlermeldung Javac: no source file
-cp braucht es beim HelloWorld ja wohl kaum - oder? (Die Beschreibung ist also unvollständig)

Egal.

Javac HelloWorld.java -> class file ist da
java HelloWorld -> tut!
jar -cf HelloWorld.jar HelloWorld.class -> jar file ist da
java -jar HelloWorld -> die bekannte Fehlermeldung

Obwohl ausdrücklich steht das manifest sei optional -> Das stimmt nicht! Es braucht eines!


```
Manifest-Version: 1.0
Main-Class: HelloWorld
```

Und siehe da, es geht!


----------



## Andi_CH (17. Dez 2010)

jar cfe HelloWorld.jar HelloWorld HelloWorld.class

Geht ohne Manifest ...


----------



## chris1519 (17. Dez 2010)

zu der erzeugten jar Datei sagt mein PC
invalid or corrupt jarfile
Ich will es mit Doppelklick starten


----------



## chris1519 (17. Dez 2010)

Doch jetzt läufts,
hat der Download wohl nicht richtig geklappt.
Also hast du auch nicht gezaubert, die Ursache bleibt also unklar.

Ich will es aber selber hinbekommen, ich sehe einige Sonderzeichen werden nicht angezeigt.


----------



## Haave (17. Dez 2010)

Mein Vorgehen war wie folgt:
- Rechtsklick auf Projektordner in Eclipse --> "Export..." --> "JAR file"
- Haken bei .classpath und src, Haken bei "Export generated class files and resources", "Export Java source files and resources", "compress contents" und "add directory entries"
- export destination festgelegt
- "Generate the manifest file" gewählt
- als Main class "Main" festgelegt

Das war's. Kenn mich mit den einzelnen Optionen auch nicht so super aus (hab z.B. keine Ahnung, was "add directory entries" macht), aber die Standardeinstellungen sind eigentlich schon ganz gut und es funktionierte *schulterzuck*


----------



## chris1519 (17. Dez 2010)

habe mir eclipse nochmal komplett neu runtergeladen und jetzt klappt es auch so wie es soll,
oder ich habe einen von den wichtigen Häkchen vergessen.
Danke auf jeden Fall!


----------

