Was ist der Unterschied zwischen Klassenpfad und Erstellungspfad?


86

Ich bin mit diesen beiden Begriffen verwechselt.

Was kann ich auch tun, um eine Datei im Ordner src eines Spring MVC-Projekts zu erstellen? Wenn ich mit einem Dateiobjekt erstelle, wird die Datei in C: \ SpringSourceTool erstellt ... Ich denke, das ist ClassPath, oder?

Wie kann ich den applicationcontextOrdner oder das Stammverzeichnis der Anwendung abrufen?

Antworten:


100

Der Erstellungspfad wird zum Erstellen Ihrer Anwendung verwendet. Es enthält alle Ihre Quelldateien und alle Java-Bibliotheken, die zum Kompilieren der Anwendung erforderlich sind.

Der Klassenpfad wird zum Ausführen der Anwendung verwendet. Dies umfasst alle Java-Klassen und -Bibliotheken, die zum Ausführen der Java-Anwendung erforderlich sind. Ein Klassenpfad ist obligatorisch. Der Standardpfad .wird verwendet, wenn die Java Virtual Machine keinen benutzerdefinierten Pfad finden kann. ( CLASSPATHUmgebungsvariable, -cpFlag oder Class-Path:Attribut in einem JAR-Manifest)


Aber javac nimmt ein Klassenpfadargument. Könnte man sagen, dass dieser Parameter für die Angabe des Erstellungspfads "überladen" ist?
Aioobe

4
Nein. Das Argument classpath ist ein Hinweis für den Compiler, was zur Laufzeit erwartet / bereitgestellt werden sollte, da Sie nicht jede Klasse erstellen, die Sie selbst verwenden (z. B. JFC, Libraries, ...). Der Erstellungspfad enthält sowohl Quell- als auch / oder Quell- / kompilierte Abhängigkeiten und wo sie gesucht werden müssen.
Johannes Wachter

Während der Entwicklung eines Plugins habe ich alle benötigten Bibliotheken zum Klassenpfad hinzugefügt, konnte aber nichts importieren. Eclipse hat sie nicht gesehen, bis ich sie hinzugefügt habe, um einen Pfad zu erstellen.
Bax

50

Der Klassenpfad ist die herkömmliche Methode, um dem (Standard-) Java-Compiler und der Java-Laufzeit mitzuteilen, wo kompilierte Klassen zu finden sind. Dies ist normalerweise eine Folge von JAR-Dateinamen und Verzeichnisnamen. Der Classpath durch den Compiler und Runtime - System verwendet werden , nicht sein müssen die gleichen, aber sie in der Regel sollte sein , vor allem für ein kleines Projekt.

Buildpath ist keine Standard-Java-Terminologie. Es ist der Begriff für die umfassendere Art und Weise, wie eine typische IDE die Beziehung zwischen den "Projekten" angibt, aus denen eine Anwendung besteht. Die IDE verwendet dies, um den Klassenpfad und den Quellpfad zum Kompilieren des Java-Codes sowie den Klassenpfad zum Ausführen des Codes zu ermitteln. Die IDE verwendet auch den Erstellungspfad, um herauszufinden, wie Sie Ihren Code und seine Abhängigkeiten als (zum Beispiel) WAR-Datei verpacken können.

Ein Eclipse-Erstellungspfad für ein Projekt enthält beispielsweise die anderen Projekte, von denen es abhängt, und listet alle zusätzlichen Bibliotheks-JARs auf, die das Projekt enthält / auf die es sich stützt. Außerdem werden die Pakete im aktuellen Projekt aufgelistet, von denen nachgelagerte Projekte abhängen können.

(Wenn Sie Maven für Ihr Projekt verwenden, ist der IDE-Erstellungspfadmechanismus sekundär zu den in den POM-Dateien deklarierten Abhängigkeiten. Wenn Sie beispielsweise Eclipse mit m2eclipse verwenden, wird der Erstellungspfad aus den POM-Dateien synthetisiert.)


27

Der Klassenpfad wird zur Laufzeit zum Laden kompilierter Klassen und Ressourcen verwendet.

Der Erstellungspfad wird zur Kompilierungszeit verwendet, um die Abhängigkeiten zu ermitteln, die zum Erstellen Ihres Projekts erforderlich sind.


Können Sie sagen, dass der Klassenpfad zum Suchen von .classDateien (und anderen kompilierten Ressourcen) verwendet wird, während der Erstellungspfad zum Suchen von Quelldateien verwendet wird, die kompiliert werden müssen?
Adam

1
@Adam Ich denke nicht, dass das ganz richtig ist. Der Erstellungspfad benötigt manchmal .class-Dateien, um Quelldateien zu kompilieren. Der Erstellungspfad verwendet also auch den Klassenpfad hinter den Kulissen. Wenn Sie sich etwas Zeit nehmen, um ein Java-Projekt mithilfe der Java-CLI zu kompilieren und auszuführen, können Sie dies sehen. Der Befehl javac und java verfügen beide über eine Klassenpfadoption, da beide diese möglicherweise benötigen.
intrepistar_88

4

Jedes Java-Projekt verfügt über einen eigenen Erstellungspfad, der alle zum Kompilieren des Projekts erforderlichen Abhängigkeiten angibt. Diese Abhängigkeiten können von anderen Java-Projekten im Arbeitsbereich, von Java-Archiv-JAR-Dateien oder von Ordnern mit .class-Dateien stammen.

In der CLASSPATH-Umgebung müssen Sie nur .class-Dateien angeben (dh jar, zip-Dateien - In jar, zip-Dateien finden Sie nur Java-Klassen), dh Sie helfen Java Virtual Machine (JVM), Java-Klassendateien zu finden

Was kann ich auch tun, um eine Datei im Ordner src eines Spring MVC-Projekts zu erstellen? Wenn ich mit einem Dateiobjekt erstelle, erstellt es die Datei in C: \ SpringSourceTool ...

Hier wurde die JVM gestartet. Wenn Sie die Datei an einer anderen Stelle erstellen möchten, verwenden Sie den relativen Pfad von hier aus.

Siehe dies und das für weitere Informationen.


Sie haben in Ihrer Antwort nicht einmal den Build-Pfad erwähnt.
Aioobe

4

Ich möchte die Antwort von Andreas_D ergänzen, um zu erklären, dass der Erstellungspfad von der IDE / dem Compiler benötigt wird, um externe Pakete und Klassen zu finden, die von Ihrem Code verwendet werden. Wir bezeichnen diese manchmal als "Abhängigkeiten" .

NB: Diese externen Pakete können in einer komprimierten JAR-Datei gepackt sein, oder es können mehrere JAR-Dateien in einer 'Bibliothek' gepackt sein . Eine Bibliothek oder eine Gruppe von Bibliotheken bildet häufig ein "Framework" .

Wenn für Ihren Code von anderen geschriebener Code erforderlich ist, können Sie diese mit dem Befehl in Ihre Klasse importierenimport . Dieser Befehl allein reicht jedoch nicht aus, da der Compiler oder die IDE wissen muss, wo sich diese Klassen befinden. Sie geben dies im Erstellungspfad an .

Die classpathauf der anderen Seite erzählt die JVM läuft Ihre Anwendung , bei dem während der eigentlichen Ausführung des Codes alle Abhängigkeiten zu finden.

Beachten Sie auch: Classpath wird von der JVM verwendet.

Buildpath wird von der IDE / dem Compiler verwendet und dient zum Erstellen des Klassenpfads aus Ihrer Entwicklungsumgebung. Wenn Sie Ihren Buildpath über Ihre IDE konfigurieren, konfigurieren Sie in Ihrem Projekt auch eine versteckte Datei mit dem Namen .classpath. Dies wird verwendet, um den Klassenpfad für JVM bei der Bereitstellung bereitzustellen.


1

Klassenpfad ( aus Wikipedia ):

Ähnlich wie beim klassischen dynamischen Ladeverhalten findet und lädt die Java Virtual Machine beim Ausführen von Java-Programmen Klassen träge (sie lädt den Bytecode einer Klasse nur, wenn die Klasse zum ersten Mal verwendet wird). Der Klassenpfad teilt Java mit, wo im Dateisystem nach Dateien gesucht werden soll, die diese Klassen definieren.

Die virtuelle Maschine sucht und lädt Klassen in dieser Reihenfolge:

Bootstrap-Klassen: Die Klassen, die für die Java-Plattform von grundlegender Bedeutung sind (einschließlich der öffentlichen Klassen der Java-Klassenbibliothek und der privaten Klassen, die erforderlich sind, damit diese Bibliothek funktionsfähig ist).

Erweiterungsklassen: Pakete, die sich im Erweiterungsverzeichnis der JRE oder des JDK befinden.

jre / lib / ext / benutzerdefinierte Pakete und Bibliotheken

Standardmäßig kann nur auf die Pakete der JDK-Standard-API und der Erweiterungspakete zugegriffen werden, ohne dass festgelegt werden muss, wo sie zu finden sind. Der Pfad für alle benutzerdefinierten Pakete und Bibliotheken muss in der Befehlszeile (oder im Manifest festgelegt werden, das der Jar-Datei mit den Klassen zugeordnet ist).

Einfach ausgedrückt: Während Ihr Programm ausgeführt wird, lädt die JVM Klassen nur nach Bedarf. Wenn eine Klasse benötigt wird, hängt die JVM vom Klassenpfad ab, um zu wissen, woher der Bytecode geladen werden soll (dh .classDateien).

Der Erstellungspfad wird normalerweise von einer IDE wie Eclipse verwendet, um zu wissen, wo nach zusätzlichen Bibliotheken gesucht werden muss, die zum Kompilieren des Quellcodes eines Projekts erforderlich sind. Der Erstellungspfad wird zur Laufzeit nicht verwendet.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.