wake-up-neo.com

So fügen Sie mehrere JAR-Dateien in classpath in Linux hinzu

Okay, ich bin sehr neu in Linux und Kommandozeile und ziemlich neu in Java. Ich habe ein Praktikum beim Aufbau eines Java-Programms erhalten. Ich habe es endlich auf meinem Rechner (Windows) erledigt und muss es jetzt auf einen Linux-Rechner migrieren, um es zu testen, und dann als ausführbare Datei ausführen. Ich habe viel über Linux gelesen und recherchiert und Klassenpfade verstanden, aber es ist immer noch sehr schwer zu verstehen. Es klickt für mich einfach noch nicht. Kann jemand den Zweck von classpath auf einfache Weise anhand von Beispielen erklären? Einer der verwirrendsten Aspekte ist für mich die Definition des physischen Pfads zum Glas. Beginne ich ganz von usr oder brauche ich nur vom jvm-Ordner aus? Wenn es wichtig ist, befindet sich mein Java-Programm nicht im Ordner jvm. Kann jemand etwas Licht für mich werfen?

EDIT: Ich danke Ihnen vielmals für Ihre Hilfe. Ich kann nicht sagen, dass ich völlig klar bin, aber mein Verständnis meiner Situation ist viel besser.

14
exit_1

Sie verwenden das Argument -classpath. Sie können entweder einen relativen oder einen absoluten Pfad verwenden. Das bedeutet, dass Sie einen Pfad relativ zu Ihrem aktuellen Verzeichnis verwenden können, OR, Sie können einen absoluten Pfad verwenden, der am Stammverzeichnis / beginnt.

Beispiel:

bash$ Java -classpath path/to/jar/file MyMainClass

In diesem Beispiel befindet sich die main-Funktion in MyMainClass und wäre irgendwo in der JAR-Datei enthalten.

Zum Kompilieren müssen Sie javac verwenden.

Beispiel:

bash$ javac -classpath path/to/jar/file MyMainClass.Java

Sie können den Klassenpfad auch über die Umgebungsvariable angeben, folgen Sie diesem Beispiel :

bash$ export CLASSPATH="path/to/jar/file:path/tojar/file2"
bash$ javac MyMainClass.Java

Für jedes normalerweise komplexe Java-Projekt sollten Sie nach dem Ant-Skript namens build.xml suchen.

12
Petriborg

Angenommen, Sie haben mehrere JAR-Dateien a.jar, b.jar und c.jar. Um sie während des Kompilierens zu classpath hinzuzufügen, müssen Sie dies tun

$javac -cp .:a.jar:b.jar:c.jar HelloWorld.Java

Zu laufen machen

$Java -cp .:a.jar:b.jar:c.jar HelloWorld
16
noPE

Der Klassenpfad ist der Ort, an den der Java-Compiler (Befehl: Javac) und die JVM (Befehl: Java) Klassen suchen, auf die Ihre Anwendung verweist. Was bedeutet es für eine Anwendung, auf eine andere Klasse zu verweisen? In einfachen Worten bedeutet das, diese Klasse irgendwo in ihrem Code zu verwenden: 

Beispiel:

public class MyClass{
    private AnotherClass referenceToAnotherClass;
    .....
}

Wenn Sie versuchen, dies (Javac) zu kompilieren, benötigt der Compiler die AnotherClass-Klasse. Das Gleiche gilt, wenn Sie versuchen, Ihre Anwendung auszuführen: Die JVM benötigt die AnotherClass-Klasse . Um diese Klasse zu finden, suchen der Javac und die JVM in einer bestimmten (Reihe von) Orten. Diese Stellen werden durch den Klassenpfad angegeben, der unter Linux eine durch Doppelpunkte getrennte Liste von Verzeichnissen darstellt (Verzeichnisse, in denen die Javac/JVM suchen sollte, um die AnotherClass zu finden, wenn sie es benötigen). 

Um Ihre Klasse zu kompilieren und dann auszuführen, sollten Sie sicherstellen, dass der Klassenpfad das Verzeichnis enthält, das die AnotherClass-Klasse enthält. Dann rufst du es so an: 

javac -classpath "dir1;dir2;path/to/AnotherClass;...;dirN" MyClass.Java //to compile it
Java -classpath "dir1;dir2;path/to/AnotherClass;...;dirN" MyClass //to run it

Normalerweise gibt es Klassen in Form von "Bundles", sogenannten JAR-Dateien/-Bibliotheken. In diesem Fall müssen Sie sicherstellen, dass sich die Dose mit der AnotherClass-Klasse in Ihrem Klassenbereich befindet:

javac -classpath "dir1;dir2;path/to/jar/containing/AnotherClass;...;dirN" MyClass.Java //to compile it
Java -classpath ".;dir1;dir2;path/to/jar/containing/AnotherClass;...;dirN" MyClass //to run it

In den obigen Beispielen können Sie sehen, wie Sie eine Klasse (MyClass.Java) kompilieren, die sich im Arbeitsverzeichnis befindet, und dann die kompilierte Klasse ausführen (beachten Sie das "." Am Anfang des Klassenpfads, der für das aktuelle Verzeichnis steht). Dieses Verzeichnis muss auch zum Klassenpfad hinzugefügt werden. Andernfalls kann die JVM sie nicht finden.

Wenn sich Ihre Klasse in einer JAR-Datei befindet, wie Sie sie in der Frage angegeben haben, müssen Sie sicherstellen, dass sich jar ebenfalls im Klassenpfad befindet, zusammen mit den übrigen erforderlichen Verzeichnissen. 

Beispiel: 

Java -classpath ".;dir1;dir2;path/to/jar/containing/AnotherClass;path/to/MyClass/jar...;dirN" MyClass //to run it

oder allgemeiner (unter Annahme einer Pakethierarchie):

Java -classpath ".;dir1;dir2;path/to/jar/containing/AnotherClass;path/to/MyClass/jar...;dirN" package.subpackage.MyClass //to run it

Um nicht jedes Mal, wenn Sie eine Anwendung ausführen möchten, den Klassenpfad festzulegen, können Sie eine Umgebungsvariable mit dem Namen CLASSPATH definieren. 

In Linux unter Eingabeaufforderung: 

export CLASSPATH="dir1;dir2;path/to/jar/containing/AnotherClass;...;dirN" 

oder bearbeiten Sie die ~/.bashrc und fügen Sie diese Zeile am Ende ein.

Da der Klassenpfad jedoch häufig geändert wird, empfiehlt es sich, den Klassenpfad auf einen Kernsatz von Verzeichnissen zu setzen, die Sie häufig benötigen, und erweitert den Klassenpfad dann jedes Mal, wenn Sie nur für diese Sitzung benötigen. So was: 

export CLASSPATH=$CLASSPATH:"new directories according to your current needs" 
5
Razvan

Schritt 1.

vi ~/.bashrc

Schritt 2. Fügen Sie diese Zeile am letzten hinzu:

export CLASSPATH=$CLASSPATH:/home/abc/lib/*;  (Assuming the jars are stored in /home/abc/lib) 

Schritt 3. 

source ~/.bashrc

Führen Sie nach diesen Schritten die Direktive aus und führen Sie Ihre Programme aus (z. B. Javac Xyz.Java)

0
user9218212