PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Executable JAR



TheGrudge
16-06-2006, 15:19
Hallo,

ich habe ein kleines Tutorial mit jME (jMonkeyEngine) nachgebaut und wollte nun alles als execJAR speichern.
Das Projekt wurde in Eclipse erstellt und muss mit einem CVS-checkout von jME genutzt werden, sprich:

1. Projekt: jME-Tutorial
2. Projekt: jME (checkout)

In Eclipse habe ich nun mein 1.Projekt eine Build-Referenz auf das 2. gelegt, um meine Klassen bauen zu können.
In Eclipse starte ich mein Projekt, in dem ich der VM den Parameter
-Djava.library.path=../jME (checkout)/lib/ übergebe.
Das funktioniert auch alles super.

Wenn ich nun mein Projekt exportiere, wähle ich den src-Folder von Projekt 1+2 aus sowie den lib-Folder vom 2.Projekt.

In meinem JAR ist also grob folgende Struktur gespeichert:
- Klassen und Sources von Projekt 1+2
- lib von Projekt 2
- Manifest mit folgendem Inhalt:

Manifest-Version: 1.0
Main-Class: com.tutorials.jme.helloworld.HelloWorld
Class-Path: lib/lwjgl.jar lib/jinput.jar lib/jogg-0.0.5.jar lib/jorbis-0.0.12.jar lib/lwjgl_fmod3.jar

Jetzt dachte ich das man das JAR einfach asuführen kann:

java -jar HelloWorld.jar
aber es geht nicht, ein NoClassDevFound-Error kommt.

Ich habe dann ewig rumgefummelt, bis ich mal auf die Idee kam, den lib-Ordner dorthin zu kopieren, wo auch das JAR liegt, danach konnte ich es zwar mit

java -jar HelloWorld.jar
immernoch nicht starten, aber mit

java -Djava.library.path=lib/ -jar HelloWorld.jar
ging es dann endlich.


Meine eigentliche Frage :D :

Kann ich das JAR denn nicht so anlegen, das der lib-Folder im JAR gespeichert ist und die Klassen gefunden werden? Muss denn lib immer ausserhalb vom JAR sein?
Oder kann ich die Class-Path-Variable im Manifest irgendwie anders setzen, so das er auch den lib-Ordner findet??
Sonst spare ich mir den lib-Folder in das JAR zu packen und muss halt eine ZIP-Datei erstellen, falls ich mal ein Programm hätte das ich jemandem zur Verfügung stellen möchte...

Corcovado
08-07-2006, 12:45
http://java.sun.com/docs/books/tutorial/deployment/jar/basicsindex.html
http://java.sun.com/docs/books/tutorial/deployment/jar/appman.html

Afaik kann man sich das Manifest oder auch einzelne Files anzeigen lassen, editieren, Zeilen zufuegen, loeschen und wieder einladen. So wie ich das verstanden habe sollte ein Jar genau dazu da sein!?