2016-05-09 15 views
0

Dieses scheinbar einfache Problem stopft mich. Ich habe ein Jar mit einer Reihe von Abhängigkeiten, die ich in Linux nicht funktionieren kann. Alle jars und das Skript befinden sich im selben Verzeichnis.unix java classpath cp hinzufügen

Dieser nimmt und versucht, meine Hauptklasse

java -cp MyJar.jar com.mylib.MyMainClass 

aber natürlich laufen sie ein ClassNotFoundException auf einer der Abhängigkeitsklassen führt. Also versuche ich, eine der Abhängigkeiten hinzuzufügen wie so

java -cp MyJar.jar:MyDependencyJar.jar com.mylib.MyMainClass 

Dann sagt es ClassNotFoundException für com.mylib.MyMainClass!

Ich habe auch versucht, diese mit verschiedenen gleichen Probleme

java -cp . com.mylib.MyMainClass 

und diese

java -cp *.jar com.mylib.MyMainClass 

und diese

java -cp .:*.jar com.mylib.MyMainClass 

Jede Idee, bitte?

+0

Wenn sich 'com.mylib.MyMainClass' in' MyJar.jar' und alle Abhängigkeitsklassen in 'MyDependencyJar.jar' befinden, dann muss' java -cp MyJar.jar: MyDependencyJar.jar com.mylib.MyMainClass' funktionieren. Was gibt es sonst noch im aktuellen Verzeichnis? – SubOptimal

+0

Ja, das habe ich gedacht und angenommen. Es würde stur aber nicht funktionieren. Nur vollständige Pfadnamen vor jeder Abhängigkeit, wie in der ersten Antwort beschrieben, funktionieren. Ich bin ziemlich erstaunt darüber, aber da ist es .. –

Antwort

0

Versuchen Sie dieses:

java -cp /path/to/jar1.jar:/path/to/jar2.jar:. com.mylib.MyMainClass 

Beachten Sie, dass Sie nicht, dass die endgültige . in dem Classpath auslassen sollte, die das aktuelle Arbeitsverzeichnis darstellen, weil -cp Verwendung würde außer Kraft setzen Ihre vorherige Klassenpfadeinstellung.

+0

Sie ** können ** einen Platzhalter im Klassenpfad wie 'java -cp/path/to/*: verwenden. com.mylib.MyMainClass'. Damit würden alle Jar-Dateien in '/ path/to /' zum Klassenpfad hinzugefügt werden. – SubOptimal

+0

@SubOptimal Ja, Sie haben Recht. Mein Fehler. Ich werde die Antwort bearbeiten. – walkerlala

0

Sie müssen diesen Befehl in dem Verzeichnis ausführen, das das übergeordnete Element com/mylib ist. Ich nehme an, dass MyMainClass.class, MyJar.jar und alle in com/mylib erscheinen.

Versuchen Sie folgendes:

java -cp .:MyJar.jar:MyDependencyJar.jar com.mylib.MyMainClass