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
Code:
-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:
Code:
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:
Code:
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
Code:
java -jar HelloWorld.jar
immernoch nicht starten, aber mit
Code:
java -Djava.library.path=lib/ -jar HelloWorld.jar
ging es dann endlich.
Meine eigentliche Frage :
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...
Lesezeichen