Was ist ein classpath und wie muss ich es einstellen?
Ich war nur beim Lesen dieser Zeile:
Die erste Sache, die der format () - Methode wird die Last ein Velocity-template aus dem classpath der namens Ausgabe.vm
Bitte erklären, was gemeint war, durch den Klassenpfad in diesem Zusammenhang, und wie ich den classpath.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beim Programmieren in Java, Sie machen andere Klassen zur Verfügung, um die Klasse, die Sie schreiben, indem Sie etwas wie dies an der Spitze der Quellcode-Datei:
Oder manchmal Sie 'bulk import" - Zeug sagen:
Später in Ihrem Programm, wenn Sie sagen:
The Java Virtual Machine weiß, wo sich der kompilierte Klasse.
Wäre es unpraktisch, um die VM schauen Sie durch jeden Ordner auf Ihrem Computer, so müssen Sie die VM eine Liste der Orte, um zu sehen. Dies geschieht, indem Sie Ordner und jar-Dateien auf Ihrem classpath.
Bevor wir darüber sprechen, wie der classpath gesetzt ist, lassen Sie uns darüber reden .die class-Dateien, Pakete und .jar-Dateien.
Erste, lassen Sie uns annehmen, MyClass ist etwas, das Sie gebaut, als Teil des Projekts, und es ist in ein Verzeichnis in Ihrem Projekt mit dem Namen
output
. Die .Klasse, die Datei wäre beioutput/org/javaguy/coolframework/MyClass.class
(zusammen mit jeder anderen Datei in diesem Paket). Um zu erhalten, dass die Datei, den Pfad müssen einfach enthalten der Ordner 'output', nicht das ganze Paket-Struktur, da Ihre import-Anweisung stellt alle, die Informationen zur VM.Nun nehmen wir an, Sie bundle CoolFramework in einem .jar-Datei und legen Sie, dass CoolFramework.jar in ein lib-Verzeichnis in Ihrem Projekt. Würden Sie jetzt setzen müssen
lib/CoolFramework.jar
in Ihren Klassenpfad ein. Die VM Blick in die jar-Datei für dieorg/javaguy/coolframework
Teil, und suchen Sie Ihre Klasse.So, klassenpfade enthalten:
Wie legen Sie den classpath?
Der erste Weg, jeder scheint zu lernen, ist mit Umgebungsvariablen. Auf einem unix-Rechner, können Sie etwas sagen wie:
Auf einer Windows-Maschine, die Sie haben zu gehen, um Ihre Umwelt-Einstellungen und entweder hinzufügen oder den Wert ändern, der ist schon da.
Die zweite Möglichkeit ist die Verwendung der
-cp
parameter beim starten von Java, wie diese:Dieser eine Variante ist die Dritte Möglichkeit, oft mit einem
.sh
oder.bat
- Datei, berechnet die classpath und übergibt es an Java über die-cp
parameter.Gibt es ein "Manko" alle der oben genannten. Auf den meisten Systemen (Linux, Mac OS, UNIX, etc.) der Doppelpunkt (':') ist die Klassenpfad-Trennzeichen. Im windowsm das Trennzeichen ist das Semikolon (';')
Also, was ist der beste Weg, es zu tun?
Einstellung Zeug weltweit über environment-Variablen ist schlecht, in der Regel für die gleichen Arten von Gründen, dass Globale Variablen böse sind. Ändern Sie die CLASSPATH-Umgebungsvariable, so dass ein Programm funktioniert, und Sie am Ende brechen Sie ein anderes Programm.
Den -cp ist der Weg zu gehen. Ich in der Regel sicherstellen, dass meine CLASSPATH-environment-variable auf eine leere Zeichenfolge ist, wo ich mich entwickle, Wann immer möglich, so dass ich vermeiden Sie den globalen Klassenpfad Probleme (einige tools sind nicht glücklich, wenn der Globale Klassenpfad leer ist, obwohl - ich weiß von zwei gemeinsamen, mega-tausend-dollar-lizenziert J2EE und Java-Servern, die diese Art von Problem mit Ihrem command-line tools).
org.javaguy.coolfw
mit entsprechenden directory-Struktur/path/to/org/javaguy/coolfw/
die classpath würde müssen enthalten/path/to/
. Wenn ich ein neues Paketorg.javaguy.hotfw
im gleichen Projekt, die resultierende Klasse (in der Regel) endet am/path/to/org/javaguy/hotfw/
. Dies erfordert in den Klassenpfad enthalten/path/to/
, die es ohnehin schon der Fall ist. Also das neue Paket (und Klassen darin enthalten ist) nicht erfordern neue Zugänge zu den classpath.Betrachten Sie es als Java ' s Antwort auf die Umgebungsvariable PATH - Betriebssysteme, die Suche nach EXE-Dateien, die auf dem PFAD, Java sucht nach Klassen und packages im classpath.
Classpath ist der Pfad, in dem die Java-Virtual-Machine-look für Benutzer-definierte Klassen, Pakete und Ressourcen in Java-Programmen.
In diesem Zusammenhang, die
format()
Methode laden Sie eine Vorlage-Datei, aus diesem Pfad.Den classpath in diesem Zusammenhang ist genau das, was es ist im Allgemeinen Kontext: überall dort, wo der VM kennt, kann es finden Klassen geladen werden, und Ressourcen, sowie (wie output.vm in deinem Fall).
Ich würde verstehen Velocity erwartet, finden Sie eine Datei namens Ausgabe.vm irgendwo in "kein Paket". Dies kann ein JAR, normalen Ordner, ... Die Wurzel von jedem der Standorte in der Anwendung classpath.
Setzen der CLASSPATH Systemvariable
Zur Anzeige der aktuellen CLASSPATH-variable, verwenden Sie die folgenden Befehle in der Windows-und UNIX (Bourne-shell):
In Windows:
C:\> set CLASSPATH
In UNIX:
% echo $CLASSPATH
Löschen Sie den aktuellen Inhalt der CLASSPATH-Variablen verwenden Sie diese Befehle:
In Windows:
C:\> set CLASSPATH=
In UNIX:
% unset CLASSPATH; export CLASSPATH
Setzen der CLASSPATH-Variablen verwenden Sie diese Befehle (zum Beispiel):
In Windows:
C:\> set CLASSPATH=C:\users\george\java\classes
In UNIX:
% CLASSPATH=/home/george/java/classes; export CLASSPATH
Classpath ist eine Umgebungsvariable des Systems. Die Einstellung dieser Variablen wird verwendet, um die Wurzel von jedem package-Hierarchie der java-compiler.
CLASSPATH ist eine Umgebungsvariable (D. H., Globale Variable des Betriebssystems zur Verfügung, um alle Prozesse) benötigt für den Java-compiler und Laufzeitumgebung suchen Sie die Java-Pakete verwendet, die in einem Java-Programm. (Warum nicht nennen PACKAGEPATH?) Dies ist ähnlich zu einem anderen environment-variable PATH, die durch die CMD-shell zu finden, die ausführbare Programme.
CLASSPATH gesetzt werden kann in einer der folgenden Möglichkeiten:
Environment variable
ist eine Globale system-Variablen zugänglich, die alle Prozesse laufen unter dem Betriebssystem (OS).classpath
in Java ist eineenvironment variable
von Java Virtuellen Maschine zu suchen oder zu finden-Klasse-Dateien(.class
) in Java beim laden von Klassen durchClassLoader
.Java-Compiler (
javac
), Java Runtime (java
) und anderen Java-tools sucht-Klassen, die Sie in Ihrem Programm in dieser Reihenfolge:Benutzer-Klassen-Suchpfad (kurz
classpath
): entschlossen in der folgenden Reihenfolge:ein. Standardmäßig auf die
current working directory (.)
.b. Einträge in der
classpath
environment variable
, was den Standard außer Kraft setzt.c. Einträge in der
-cp
(oder-classpath
) Kommandozeilen-option überschreibt dieclasspath
Umgebungsvariable.d. Die Laufzeit command-line-option
-jar
, überschreiben alle der oben genannten.Den
classpath
Umgebungsvariable könnte die include-Verzeichnisse (mit vielen class-Dateien) und JAR-Dateien (single-file-Archiv von class-Dateien). Wennclasspath
ist nicht festgelegt, wird standardmäßig auf diecurrent directory
. Wenn Sie dieclasspath
, ist es wichtig, diecurrent working directory (.)
. Ansonsten wird das aktuelle Verzeichnis nicht durchsucht werden.Können Sie überschreiben
classpath
in Java, definiert durchenvironment variable
indem Sie die option-cp
oder-classpath
während der Ausführung von Java-Programm, und dies ist der beste Weg, um haben unterschiedlicheclasspath
für andere Java-Anwendung läuft auf Unix-oder Windows-Rechner.Trennzeichen sind Semikolon
;
- Windows -, Darm -:
- LinuxZum Beispiel-Befehl für MacOS
Lesen Sie mehr hier und hier
Statische member einer Klasse können direkt aufgerufen werden, ohne die Schaffung von Objekt-Instanz.
Da die main-Methode ist static Java virtual Machine aufgerufen werden kann, ohne die Schaffung einer Instanz einer Klasse enthält die main-Methode, die start-Punkt des Programms.
classpath und Pfad werden die r-Variablen . in der Regel , Sie müssen das jdk/bin zu path, so dass u verwenden könnte, die java-compiler überall , classpath ist der Pfad zu Ihrem .class-Dateien . der classpath ist eine Standard-Pfad einen Punkt(.) was bedeutet das aktuelle Verzeichnis. aber wenn u verwendet, die Pakete . würde u geben Sie entweder den vollständigen Pfad der .Klasse Datei, oder legen Sie die .class-Datei Pfad in der classpath einsparen würde einem viel Arbeit !