webentwicklung-frage-antwort-db.com.de

Was ist ein Klassenpfad und wie stelle ich ihn ein?

Ich habe gerade diese Zeile gelesen:

Die format () -Methode lädt als erstes eine Velocity-Vorlage aus dem Klassenpfad output.vm

Bitte erläutern Sie, was in diesem Zusammenhang unter Klassenpfad zu verstehen war und wie ich den Klassenpfad festlegen sollte.

293
Blankman

Wenn Sie in Java programmieren, stellen Sie der Klasse, die Sie schreiben, andere Klassen zur Verfügung, indem Sie so etwas oben in Ihre Quelldatei einfügen:

import org.javaguy.coolframework.MyClass;

Oder manchmal importieren Sie Massenware, indem Sie sagen:

import org.javaguy.coolframework.*;

Also später in Ihrem Programm, wenn Sie sagen:

MyClass mine = new MyClass();

Die Java Virtual Machine weiß, wo sich Ihre kompilierte Klasse befindet.

Es wäre unpraktisch, jeden Ordner auf Ihrem Computer nach VM durchsehen zu lassen, daher müssen Sie VM= eine Liste der zu durchsuchenden Stellen angeben. Dies ist Dies geschieht, indem Sie Ordner- und JAR-Dateien in Ihren Klassenpfad einfügen.

Bevor wir uns mit dem Festlegen des Klassenpfads befassen, wollen wir uns mit Klassendateien, Paketen und JAR-Dateien befassen.

Angenommen, MyClass wurde als Teil Ihres Projekts erstellt und befindet sich in einem Verzeichnis in Ihrem Projekt mit dem Namen output. Die .class-Datei wäre bei output/org/javaguy/coolframework/MyClass.class (zusammen mit jeder anderen Datei in diesem Paket). Um zu dieser Datei zu gelangen, muss Ihr Pfad lediglich den Ordner 'output' und nicht die gesamte Paketstruktur enthalten, da Ihre import-Anweisung der VM alle diese Informationen bereitstellt.

Nehmen wir nun an, Sie bündeln CoolFramework in eine JAR-Datei und speichern diese CoolFramework.jar in einem lib-Verzeichnis in Ihrem Projekt. Sie müssten jetzt lib/CoolFramework.jar in deinen Klassenpfad. Die VM sucht in der JAR-Datei nach dem org/javaguy/coolframework Teil, und finde deine Klasse.

Klassenpfade enthalten also:

  • JAR-Dateien und
  • Pfade an die Spitze von Pakethierarchien.

Wie stellst du deinen Klassenpfad ein?

Der erste Weg, den jeder zu lernen scheint, sind Umgebungsvariablen. Auf einer Unix-Maschine können Sie Folgendes sagen:

export CLASSPATH=/home/myaccount/myproject/lib/CoolFramework.jar:/home/myaccount/myproject/output/

Auf einem Windows-Computer müssen Sie Ihre Umgebungseinstellungen aufrufen und den bereits vorhandenen Wert entweder hinzufügen oder ändern.

Die zweite Möglichkeit ist die Verwendung des -cp Parameter beim Starten von Java, wie folgt:

Java -cp "/home/myaccount/myproject/lib/CoolFramework.jar:/home/myaccount/myproject/output/"  MyMainClass

Eine Variante davon ist der dritte Weg, der oft mit einem .sh oder .bat Datei, die den Klassenpfad berechnet und an Java über das -cp Parameter.

Es gibt ein "Gotcha" mit all den oben genannten. Auf den meisten Systemen (Linux, Mac OS, UNIX usw.) ist das Doppelpunktzeichen (':') das Klassenpfadtrennzeichen. In Windows ist das Trennzeichen das Semikolon (';')

Also, wie geht das am besten?

Das globale Setzen von Daten über Umgebungsvariablen ist fehlerhaft, im Allgemeinen aus den gleichen Gründen, aus denen globale Variablen fehlerhaft sind. Sie ändern die Umgebungsvariable CLASSPATH so, dass ein Programm funktioniert und am Ende ein anderes Programm unterbrochen wird.

Das -cp ist der richtige Weg. Im Allgemeinen stelle ich sicher, dass meine Umgebungsvariable CLASSPATH eine leere Zeichenfolge ist, in der ich nach Möglichkeit entwickle, um globale Klassenpfadprobleme zu vermeiden (einige Tools sind jedoch nicht glücklich, wenn der globale Klassenpfad leer ist - ich kenne zwei gemeinsame Megatausend J2EE mit Dollar-Lizenz und Java Server, bei denen diese Art von Problem mit ihren Befehlszeilentools auftritt).

476
bokmann

Stellen Sie es sich als Javas Antwort auf die Umgebungsvariable PATH vor - Betriebssysteme suchen auf dem Pfad nach EXE-Dateien, Java sucht auf dem Klassenpfad nach Klassen und Paketen.

56
user257111

Der Klassenpfad ist der Pfad, unter dem die Java= Virtual Machine in Java) - Programmen nach benutzerdefinierten Klassen, Paketen und Ressourcen sucht.

In diesem Zusammenhang lädt die format() -Methode eine Vorlagendatei von diesem Pfad.

11
Desintegr

Der Klassenpfad in diesem Kontext ist genau das, was er im allgemeinen Kontext ist: Überall dort, wo die VM weiß, dass sie zu ladende Klassen findet, und auch Ressourcen (wie in Ihrem Fall output.vm). .

Ich würde verstehen, dass Velocity erwartet, eine Datei namens output.vm irgendwo in "no package" zu finden. Dies kann eine JAR, ein regulärer Ordner, ... sein. Der Stamm eines beliebigen Speicherorts im Klassenpfad der Anwendung.

5
Romain

Einstellen der Systemvariablen CLASSPATH

Verwenden Sie die folgenden Befehle in Windows und UNIX (Bourne Shell), um die aktuelle CLASSPATH-Variable anzuzeigen: In Windows: C:\> set CLASSPATH Unter UNIX: % echo $CLASSPATH

Verwenden Sie die folgenden Befehle, um den aktuellen Inhalt der Variablen CLASSPATH zu löschen: In Windows: C:\> set CLASSPATH= Unter UNIX: % unset CLASSPATH; export CLASSPATH

Verwenden Sie zum Festlegen der Variablen CLASSPATH die folgenden Befehle (zum Beispiel): In Windows: C:\> set CLASSPATH=C:\users\george\Java\classes Unter UNIX: % CLASSPATH=/home/george/Java/classes; export CLASSPATH

2
lft93ryt

CLASSPATH ist eine Umgebungsvariable (dh globale Variablen des Betriebssystems, die allen Prozessen zur Verfügung stehen), die der Java Compiler und die Laufzeit benötigt, um die Java) Pakete zu lokalisieren Wird in einem Java) -Programm verwendet. (Warum nicht PACKAGEPATH aufrufen?) Dies ähnelt einer anderen Umgebungsvariablen PATH, die von der CMD-Shell zum Auffinden der ausführbaren Programme verwendet wird.

CLASSPATH kann auf eine der folgenden Arten festgelegt werden:

CLASSPATH can be set permanently in the environment: In Windows, choose control panel ⇒ System ⇒ Advanced ⇒ Environment Variables ⇒ choose "System Variables" (for all the users) or "User Variables" (only the currently login user) ⇒ choose "Edit" (if CLASSPATH already exists) or "New" ⇒ Enter "CLASSPATH" as the variable name ⇒ Enter the required directories and JAR files (separated by semicolons) as the value (e.g., ".;c:\javaproject\classes;d:\Tomcat\lib\servlet-api.jar"). Take note that you need to include the current working directory (denoted by '.') in the CLASSPATH.

To check the current setting of the CLASSPATH, issue the following command:

> SET CLASSPATH

CLASSPATH can be set temporarily for that particular CMD Shell session by issuing the following command:

> SET CLASSPATH=.;c:\javaproject\classes;d:\Tomcat\lib\servlet-api.jar

Instead of using the CLASSPATH environment variable, you can also use the command-line option -classpath or -cp of the javac and Java commands, for example,

> Java –classpath c:\javaproject\classes com.abc.project1.subproject2.MyClass3
1
Unnati Solanki

Environment variable Ist eine globale Systemvariable, auf die alle unter dem Betriebssystem (OS) ausgeführten Prozesse zugreifen können.

classpath in Java ist ein environment variable, der von Java Virtuelle Maschine zum Suchen oder Finden von Klassendateien (.class) in Java beim Laden der Klasse durch ClassLoader.

Java Compiler (javac), Java Runtime (Java) und andere Java) Tools suchen nach Klassen, die in Ihrem Programm verwendet werden in dieser Reihenfolge:

  1. Java-Plattformklassen (Bootstrap-Klassen)
  2. Java-Erweiterungsverzeichnisse
  3. Suchpfad für Benutzerklassen (kurz classpath): Wird in der folgenden Reihenfolge festgelegt:

    ein. Standardmäßig wird current working directory (.) verwendet.

    b. Einträge in der classpathenvironment variable, Die die Standardeinstellung überschreibt.

    c. Einträge in der Befehlszeilenoption -cp (Oder -classpath), Die die Umgebungsvariable classpath überschreibt.

    d. Die Laufzeitbefehlszeilenoption -jar, Die alle oben genannten Optionen außer Kraft setzt.

Die Umgebungsvariable classpath kann Verzeichnisse (mit vielen Klassendateien) und JAR-Dateien (ein Archiv von Klassendateien mit nur einer Datei) enthalten. Wenn classpath nicht festgelegt ist, wird standardmäßig current directory Verwendet. Wenn Sie classpath einstellen, ist es wichtig, die Funktion current working directory (.) einzuschließen. Andernfalls wird das aktuelle Verzeichnis nicht durchsucht.

Sie können classpath in Java überschreiben, definiert durch environment variable, Indem Sie die Option -cp Oder -classpath Angeben, während Sie Java program and Dies ist der beste Weg, um unterschiedliche classpath für unterschiedliche Java) Anwendungen zu verwenden, die auf demselben Unix- oder Windows-Computer ausgeführt werden.

Java -cp "<path/1><separator><path/2>" <path.to.your.MainClass>

trennzeichen sind Semikolon ; - Windows, Doppelpunkt : - Linux

Zum Beispiel Befehl für MacOS

Java -cp "Test.jar:lib/*" my.package.MainClass

Lesen Sie mehr hier und hier

1
yoAlex5

Klassenpfad ist eine Umgebungsvariable des Systems. Die Einstellung dieser Variablen wird verwendet, um das Stammverzeichnis einer Pakethierarchie für den Java Compiler bereitzustellen.

1
Bimalendu nath

Statisches Mitglied einer Klasse kann direkt aufgerufen werden, ohne eine Objektinstanz zu erstellen. Da die Hauptmethode statisch ist, kann die virtuelle Maschine Java sie aufrufen, ohne eine Instanz einer Klasse zu erstellen, die die Hauptmethode enthält, die der Startpunkt des Programms ist.

0
Sumanth Ydt