1186 Stimmen

Einbindung aller Jars in einem Verzeichnis in den Java-Klassenpfad

Gibt es eine Möglichkeit, alle JAR-Dateien innerhalb eines Verzeichnisses in den Klassenpfad aufzunehmen?

Ich versuche java -classpath lib/*.jar:. my.package.Program und es ist nicht in der Lage, Klassendateien zu finden, die in diesen Jars enthalten sind. Muss ich jede Jar-Datei separat zum Klassenpfad hinzufügen?

2voto

Robert Van Hoose Punkte 203

Stellen Sie sich eine jar-Datei als die Wurzel einer Verzeichnisstruktur vor. Ja, Sie müssen sie alle einzeln hinzufügen.

2voto

Sreesankar Punkte 299

Es ist keine direkte Lösung, um /* auf -cp zu setzen, aber ich hoffe, dass Sie das folgende Skript verwenden können, um die Situation für dynamische Klassenpfade und Bibliotheksverzeichnisse ein wenig zu erleichtern.

 libDir2Scan4jars="../test";cp=""; for j in `ls ${libDir2Scan4jars}/*.jar`; do if [ "$j" != "" ]; then cp=$cp:$j; fi; done; echo $cp| cut -c2-${#cp} > .tmpCP.tmp; export tmpCLASSPATH=`cat .tmpCP.tmp`; if [ "$tmpCLASSPATH" != "" ]; then echo .; echo "classpath set, you can now use  ~>         java -cp \$tmpCLASSPATH"; echo .; else echo .; echo "Error please check libDir2Scan4jars path"; echo .; fi; 

Das Skript wurde für Linux erstellt, es könnte auch ein ähnliches für Windows geben. Wenn das richtige Verzeichnis als Eingabe für "libDir2Scan4jars" angegeben wird, scannt das Skript alle Jars und erstellt einen Klassenpfad-String und exportiert ihn in die Umgebungsvariable "tmpCLASSPATH".

1voto

Legen Sie den Klassenpfad so fest, dass er für mehrere Jars und die Klassendateien des aktuellen Verzeichnisses geeignet ist.

CLASSPATH=${ORACLE_HOME}/jdbc/lib/ojdbc6.jar:${ORACLE_HOME}/jdbc/lib/ojdbc14.jar:${ORACLE_HOME}/jdbc/lib/nls_charset12.jar; 
CLASSPATH=$CLASSPATH:/export/home/gs806e/tops/jconn2.jar:.;
export CLASSPATH

1voto

vkrams Punkte 6857

Ich habe mehrere Gläser in einem Ordner. Der folgende Befehl funktionierte für mich in JDK1.8 um alle im Ordner vorhandenen Jars einzuschließen. Bitte beachten Sie, dass Sie in Anführungszeichen einschließen, wenn Sie ein Leerzeichen im Klassenpfad haben

Windows

Kompilieren: javac -classpath "C:\My Jars\sdk\lib\*" c:\programs\MyProgram.java

Laufen: java -classpath "C:\My Jars\sdk\lib\*;c:\programs" MyProgram

Linux

Kompilieren: javac -classpath "/home/guestuser/My Jars/sdk/lib/*" MyProgram.java

Laufen: java -classpath "/home/guestuser/My Jars/sdk/lib/*:/home/guestuser/programs" MyProgram

0voto

kellogs Punkte 2737

Reihenfolge der Argumente für java Befehl ist ebenfalls wichtig:

c:\projects\CloudMirror>java Javaside -cp "jna-5.6.0.jar;.\"
Error: Unable to initialize main class Javaside
Caused by: java.lang.NoClassDefFoundError: com/sun/jna/Callback

gegen

c:\projects\CloudMirror>java -cp "jna-5.6.0.jar;.\" Javaside
Exception in thread "main" java.lang.UnsatisfiedLinkError: Unable

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X