# JAR-Files ausführbar machen



## der Pate (19. Mai 2004)

wie sage ich dem rechner, welches die main-class ist, und was muss ich noch alles machen um eine jar-file ausführbar zu machen?


----------



## L-ectron-X (19. Mai 2004)

Um ein Jar-Archiv ausführbar zu machen, brauchst Du eine Datei namens Manifest.mf. In dieser wird letztendlich dem Interpreter die Main-Class bekannt gemacht.
Um ein ausführbares Jar-File zu erstellen, öffnest Du Dir mit einem Texteditor zunächst eine Datei und gibst ihr den Namen *Manifest.txt*. Der Inhalt dieser Textdatei kann lediglich aus folgendem Text bestehen:

```
CLASS-PATH: .
MAIN-CLASS: StartKlasse
```
Ganz wichtig dabei: Beide Zeilen sind mit einem Zeilenumbruch (Enter) abzuschließen. Und die Angabe der Main-Class erfolgt *ohne* die Dateiendung _.class_
Diese Datei legst Du in das Verzeichnis Deiner Quelltextdateien bzw. in das Verzeichnis Deiner Startklasse (Main-Class).
Fehlt nur noch der Aufruf des Dienstprogrammes Jar.
Ich persönlich habe mir dazu (das macht jeder anders) eine Batchdatei (MakeJar.bat ) angefertigt, die ich ganz bequem in jedes meiner Programmier-Projekt-Verzeichnisse kopieren, anpassen und immer schnell ohne viel Tipperei per Doppelklick ausführen kann:

```
rem Pfad zum bin-Verzeichnis des SDK setzen
set path=C:\j2sdk1.4.2_04\bin

rem Jar aufrufen
jar cfvm JarName.jar Manifest.txt *.*

rem Konsole für eventuelle Fehlermeldungen noch offen lassen
pause
```
Diese Batchdatei würde Dir den kompletten Inhalt (*.*) Deines Projekt Verzeichnisses inklusive aller Quelltext-Dateien, Grafiken und Unterverzeichnisse in einer ausführbaren Jar-Datei komprimiert abspeichern.
Die Manifest.txt ist deshalb eine .txt-Datei, weil sie sich so einfacher editieren lässt. (Doppelklick)


----------



## bygones (20. Mai 2004)

oder ne IDE nehmen  :wink:


----------



## L-ectron-X (20. Mai 2004)

Klar, auch eine perfekte Möglichkeit. Aber weniger Leute wissen, wie man eine ausführbares Jar-Archiv "per Hand" erstellt, deshalb scheint dieses Thema auch öfter mal hier im Forum aufzutauchen.
Hm, vielleicht schreibe ich mal etwas Ausführlicheres in den FAQ-Bereich.


----------



## Roar (20. Mai 2004)

L-ectron-X hat gesagt.:
			
		

> Klar, auch eine perfekte Möglichkeit. Aber weniger Leute wissen, wie man eine ausführbares Jar-Archiv "per Hand" erstellt, deshalb scheint dieses Thema auch öfter mal hier im Forum aufzutauchen.
> Hm, vielleicht schreibe ich mal etwas Ausführlicheres in den FAQ-Bereich.



gute idee  :toll: 
@all: ich benutze immer den JarWizard ( www.sortamusic.com ). das ding ist ziemlich cool, und ist auch gut. ist halt ätzend wenn man zig-files in eine jar packen will und das alles in der konsole machen will  :autsch:


----------



## bygones (20. Mai 2004)

oder ant ( http://ant.apache.org/ ) :wink:


----------



## der Pate (20. Mai 2004)

wenn ich das mit der .bat mache, macht der ne jar file. wenn ich die aber doppelt anklicke, dann kommt:

"Fatal Exception occured. Program will exit."

vom Java Virtual Machine Launcher


----------



## Beni (20. Mai 2004)

der Pate hat gesagt.:
			
		

> wenn ich das mit der .bat mache, macht der ne jar file. wenn ich die aber doppelt anklicke, dann kommt:
> 
> "Fatal Exception occured. Program will exit."
> 
> vom Java Virtual Machine Launcher



Starte mal aus der Konsole "java -jar irgendetwas.jar". Dann sollte eine Fehlermeldung kommen, die vielleicht weiterhilft.


----------



## der Pate (20. Mai 2004)

habs jetzt mal mit nem anderen proggy probiert. da kommt beim doppelklick die gleiche fehlermeldung aber inner konsole kommt keine. beim anderen kam, dass er keine source für imageicon hätte. alles komisch


----------



## der Pate (20. Mai 2004)

mit nem 10-zeiler hab ichs jetzt hinbekommen, bei den anderen muß ich wohl auf fehlersuche gehen, also danke erst mal


----------



## L-ectron-X (20. Mai 2004)

Der beschriebene Fehler deutet darauf hin, dass benötigte Resourcen nicht bereit stehen. Also irgendwelche Grafiken, Klassen, Textdateien o.ä., die zur Laufzeit vom Programm geladen werden sollen.
In meinem Beispiel liegen alle Klassen in ein und dem selben Verzeichnis, alle Grafiken in einem Unterverzeichnis.


----------



## Oni (17. Sep 2004)

Wenn ich das MakeJar.bat benutze bekomme ich die fehlermeldung. warum??

java.io.IOException: invalid manifest format
        at java.util.jar.Manifest.read(Manifest.java:193)
        at java.util.jar.Manifest.<init>(Manifest.java:52)
        at sun.tools.jar.Main.run(Main.java:124)
        at sun.tools.jar.Main.main(Main.java:904)


----------



## P3AC3MAK3R (17. Sep 2004)

http://java.sun.com/docs/books/tutorial/jar/index.html


----------



## Oni (17. Sep 2004)

und was sagt mir das jetzt?


----------



## Oni (17. Sep 2004)

Kann das nochmal einer schrittweise erklären wie ich aus einer meineClass.class ein jar mache.

```
CLASS-PATH: . 
MAIN-CLASS: meineClass.class
```
ist das so richtig als Mainfest.txt


```
jar  cfvm  meineJar.jar  Manifest.txt  meineClass.class
```
muss ich das dann so eingeben in die console?

und was sagt mir so eine fehlermeldung

```
java.io.IOException: invalid manifest format
        at java.util.jar.Manifest.read(Manifest.java:193)
        at java.util.jar.Manifest.<init>(Manifest.java:52)
        at sun.tools.jar.Main.run(Main.java:124)
        at sun.tools.jar.Main.main(Main.java:904)
```


----------



## Oni (17. Sep 2004)

das hat jetzt funktioniert, 


```
C:\Dokumente und Einstellungen\faerberm\Desktop\Java\Aktien Rechner\jar>jar -c
m Aktienrechner.jar Manifest.txt *.*
Manifest wurde hinzugef³gt.
Hinzuf³gen von: einsP.class(ein = 9864) (aus= 4256)(komprimiert 56 %)
Hinzuf³gen von: Manifest.txt(ein = 32) (aus= 32)(komprimiert 0 %)
```

aber dann bekomme ich die fehlermeldung von dem java virtual 
maschine luncher

```
Failed to load Main-Class manifest attribute from
```

was heist das?  ich habe eine andere *.jar auf dem rechner die kann ich öffnen warum die nicht?


----------



## Griffin (17. Sep 2004)

Ich hab folgendes gemacht:

Manifest:

```
CLASS-PATH: .
MAIN-CLASS: BandGen
```

Und hab nur eine class datei (BandGen  )
Trotzdem kommt ein Fehler von wegen Fatal...


----------



## Roar (17. Sep 2004)

Fatal exception occured... is was anderes als "Failed to load main class attribute".
1. am ende muss man noch in der manifest datei eine neue zeile machen ( falls nicht) udn dann startet mal euer programm über die konsole, da wird ein stacktrace geschrieben werden wenn eine exception geworfen wird


----------



## L-ectron-X (17. Sep 2004)

Oni hat gesagt.:
			
		

> ```
> CLASS-PATH: .
> MAIN-CLASS: meineClass.class
> ```


Das Problem liegt in der 2. Zeile.
Es muss nur der Klassenname der Klasse angegeben werden, welche die main()-Methode enthält. Und zwar *ohne* die Dateiendung _.class_


----------



## Oni (17. Sep 2004)

Das hatte ich ja schon vorher geändert.


```
CLASS-PATH: .
MANI-PATH: meineClass
```

es wird mir ja eine jar datei erstellt mit :

```
jar cfvm meinJar.jar Manifest.txt *.class
```

ich bekomme dann die datei meinJar.jar aber wenn ich da dann doppelklick drauf mache bekomme ich die meldung von JVM:


```
Failed to load Main-Class manifest attribute from bla bla bla
```


----------



## L-ectron-X (17. Sep 2004)

Wenn Du beide Zeilen mit einem Enter abschließt, sollte es funktionieren. ???:L


----------



## Oni (17. Sep 2004)

ne hat leider auch nichts geholfen. muss ich vielleicht noch irgendwas in die jar packen ausser der manifest.txt und der xxx.class?


----------



## Roar (17. Sep 2004)

Oni hat gesagt.:
			
		

> MANI-PATH: meineClass



MANI-PATH ???

Main-Class !!!


----------



## Oni (17. Sep 2004)

lol, danke daran hat es gelegen :-D


```
CLASS-PATH: .
MAIN-CLASS: MeineClass
```


----------



## Icewind (18. Sep 2004)

habs ins Projekte Forum verschoben


----------



## Guest (18. Sep 2004)

```
@echo off
echo Manifest-Version: 1.0>manifest.mf
echo Class-Path: .>>manifest.mf
echo Main-Class: package.of.my.MeineClass>>manifest.mf
jar -cfm myjar.jar manifest.mf *.class
erase manifest.mf
```


----------



## Tungdil (2. Feb 2006)

Hallo,

also ich hab das nun auch versucht (so wie es beschrieben war), nur leider sagt der mir in der Konsole immer


> Der Befehl ist entweder fasch geschrieben oder konnte nicht gefunden werden.
> Bitte überprüfen sie die Schreibweise und die Umgebungsvariable 'path'.



So sieht meine Manifest.txt aus:


```
CLASS-PATH: .
MAIN-CLASS: Dateinamen
```

So sieht meine  MakeJar.bat aus:


```
set path=C:\Prog\Java\j2re1.4.1_03\bin

jar cfvm Filmliste.jar Manifest.txt *.class

pause
```

Wo is mein Fehler?


----------



## thE_29 (2. Feb 2006)

Ähm!

Warum ist da bitte der CLASS-PATH gesetzt??

Und falls du packages hast , musst du Package.bla.mainclass


Achja, probiers mal so schreiben:

Main-Class: package.main
<Enter>

Es dürfen nirgends zuviele Leerzeichen sein!!! (also hinterm main, zB)


----------



## Tungdil (2. Feb 2006)

ok danke funzt


----------

