Frage zu jars/classpath

JanHH

Top Contributor
Hallo,

bei meinem Projekt kommt ein jar-File raus, welches per Kommandozeilenaufruf gestartet werden soll. Das Projekt benötigt ausserdem einige externe Bibliotheken (hibernate usw.), welche nicht Teil des jar-Files sind. Irgendwie krieg ich die Konfiguration des Kommandozeilenaufrufs nicht so hin, dass es funktioniert. Ist bisschen blöd aber ich frag einfach mal.

Also das projekt ist in dem File "test.jar". Der Aufruf ist eigentlich

java -cp test.jar a.b.xyz;

Ausserdem gibts etliche Bibliotheken (in Form weiterer jar-Files), die ebenfalls benötigt werde. Diese stehen bspws. im Verzeichnis d:\kram. Wie ruft man das auf?

java -cp d:\kram\*.jar;test.jar a.b.xyz; << das war spontan meine Idee, aber läuft nicht.

Wie genau muss die Syntax des Aufrufs sein?

Zum Testen hab ich die ganzen jar-Files einfach ins jre/lib/ext-Verzeichnis kopiert, das hat funktioniert, aber ist natürlich nicht der dauerhaft richtige Weg..

Gruß+Danke
Jan
 
Code:
java -cp d:/kram -jar test.jar
sollte hinhauen, wenn im manifest der jar die main angegeben ist (davon geh ich mal aus).
 
Stimmt, hatte mich von Eikes Vorschlag irritieren lassen.

Mein Vorschlag wäre beim bauen des test.jar den benötigten Classpath mit ins Manifest zu packen. (Da kann man seit Java 6 auch den * als Wildcard nutzen). Ansonsten bleibt nur, den kompletten Classpath anzugeben:

Code:
java -cp d:/kram/test1.jar;d:/kram/test2.jar;test.jar a.b.xyz

oder aber per Shellscript den Classpath vorher dynamisch zusammenbauen...

Edit:
Oder man baut sich extra hierfür ein kleines Ant-Script, das den Classpath zusammenbaut

Tipp:
[XML]<classpath id="run">
<fileset dir="d:/kram" includes="*.jar" />
</classpath>[/XML]

und [XML]<java ... />[/XML]
 
Code:
java -cp d:/kram -jar test.jar
sollte hinhauen, wenn im manifest der jar die main angegeben ist (davon geh ich mal aus).

Nein. Wenn ich den -jar Schalter verwende, wird auch erwartet, dass der Klassenpfad in der Manifestdatei gepflegt wird. Der Schalter -cp wird dann ignoriert.

Also entweder -cp und Mainklasse oder nur -jar und alles in der Manifdestdatei eintragen.
 
Das dürfte in der Tat weiterhelfen. Da es sich um eine mindestens zweistellige Anzahl jars in d:/kram handelt, ist die Variante, diesen in der manifest-Datei anzugeben, wohl die beste. Wobei dann natürlich irgendwie festgelegt wird, wo genau die Dateien stehen müssen. Aber das lässt sich noch halbwegs in den Griff bekommen.
 

Zurück
Oben