Java-Erstellungspfad festlegen

In diesem Abschnitt wird beschrieben, wie der Java-Erstellungspfad festgelegt wird.  Der Erstellungspfad ist der Klassenpfad, der für die Erstellung eines Java-Projektes (IJavaProject) verwendet wird.

Ein Klassenpfad ist einfach ein Bereich von Klassenpfadeinträgen (IClassPathEntry), die die verfügbaren Typen beschreiben.  Die Typen können als Quelle oder in binärem Format vorliegen. Die Reihenfolge der Einträge im Pfad definiert die Suchreihenfolge für das Auflösen von Typen während einer Erstellung.

Der Java-Erstellungspfad wird in der Struktur eines Java-Projektelements wiedergegeben.  Sie können ein Paket nach den Stammverzeichnissen seiner Paketfragmente (IPackageFragmentRoot) abfragen.  Jeder Klassenpfadeintrag ist mindestens einem Stammverzeichnis für Paketfragmente zugeordnet, das wiederum jeweils eine Gruppe von Paketfragmenten enthält.

Diese Erläuterung des Erstellungspfades betrifft nicht den Java-Laufzeitpfad, der separat zum Erstellungspfad definiert werden kann.  Eine Erläuterung des Laufzeitklassenpfades können Sie unter Java-Code ausführen nachlesen.

Erstellungspfad ändern

Sie können den Erstellungspfad eines Projekts über das Programm unter Verwendung von setRawClasspath für das entsprechende Java-Element des Projekts ändern.  Der folgende Code legt den Klassenpfad für eine Projektressource fest:

	IProject project = ... // get some project resource
	IJavaProject javaProject = JavaCore.create(project);
	IClasspathEntry[] newClasspath = ...;
	javaProject.setRawClasspath(newClasspath, someProgressMonitor);
	

(Hinweis:  Die Verwendung des Begriffes "raw" (= unformatiert) für den Klassenpfad hebt die Tatsache hervor, dass keine Variablen aufgelöst wurden, mit denen Eintragspositionen beschrieben werden.)

Der Java-Erstellungspfad wird in einer Datei namens '.classpath' in der Dateistruktur des Projekts gespeichert.  Diese Datei soll eine gemeinsame Benutzung der Einstellungen von Java-Erstellungspfaden über ein Quellcoderepository ermöglichen. Diese Datei sollte nicht manuell bearbeitet werden, da sie sonst beschädigt werden könnte.

Klassenpfadeinträge

Klassenpfadeinträge können unter Verwendung von Factorymethoden, die unter JavaCore definiert sind, festgelegt werden.  Klassenpfadeinträge können auf folgende Elemente verweisen:

Ausschlussmuster

Einem Klassenpfadquelleneintrag kann ein Ausschlussmuster zugeordnet werden, das verhindert, dass bestimmte Ressourcen in einem Quellenordner im Klassenpfad angezeigt werden.  Durch Verwenden eines Musters können bestimmte Teile der Ressourcenbaumstruktur herausgefiltert werden.  Jeder Pfad eines Ausschlussmusters steht im Verhältnis zum Klassenpfadeintrag und verwendet einen Mustermechanismus ähnlich wie Ant.  Mit Hilfe von Ausschlussmustern können verschachtelte Quellenordner angegeben werden, sofern das äußere Muster das innere Muster ausschließt.

Weitere Details zu Ausschlussmustern können Sie unter getExclusionPatterns() nachlesen.

Die Java-Projekt-API isOnClasspath überprüft sowohl die Einschluss- als auch die Ausschlussmuster, bevor sie ermittelt, ob eine bestimmte Ressource im Klassenpfad enthalten ist.

Anmerkungen:

Einschlussmuster

Einem Klassenpfadquelleneintrag kann auch ein Einschlussmuster zugeordnet werden, das die Ressourcen, die im Klassenpfad angezeigt werden sollen, explizit definiert.  Werden keine Einschlussmuster angegeben, schließt der Quelleneintrag alle relevanten Dateien in der Ressourcenbaumstruktur ein, deren Stammverzeichnis sich im Pfad des betreffenden Quelleneintrags befindet. Bei Angabe von einem oder mehreren Einschlussmustern werden nur die angegebenen Teile der Ressourcenbaumstruktur eingeschlossen. Jeder angegebene Pfad muss ein relativer Pfad sein und wird relativ zum Pfad des betreffenden Quelleneintrags interpretiert. Bei Dateimustern muss die Groß-/Kleinschreibung beachtet werden. Eine Datei, die mit einem dieser Muster übereinstimmt, wird in das entsprechende Stammverzeichnis für das Paketfragment eingeschlossen, sofern sie nicht durch ein Ausschlussmuster des betreffenden Eintrags ausgeschlossen wird.

Eine Erläuterung der Syntax und Semantik von Pfadmustern finden Sie unter getExclusionPatterns(). Das Fehlen von Einschlussmustern ist semantisch äquivalent zum expliziten Einschlussmuster **.

Die Java-Projekt-API isOnClasspath überprüft sowohl die Einschluss- als auch die Ausschlussmuster, bevor sie ermittelt, ob eine bestimmte Ressource im Klassenpfad enthalten ist.

Beispiele:

Klassenpfad auflösen

Da Sie mit Klassenpfadvariablen und Containern dynamisch gebundene Klassenpfadeinträge definieren können, unterscheidet die Klassenpfad-API zwischen einem unformatierten und einem aufgelösten Klassenpfad.   Der unformatierte Klassenpfad ist der Klassenpfad, der ursprünglich für das Java-Projekt unter Verwendung von setRawClasspath festgelegt wurde. Er kann durch Abfragen des Projekts nach getRawClasspath weitergehend abgefragt werden.  Der aufgelöste Klassenpfad kann unter Verwendung von getResolvedClasspath abgefragt werden. Diese Operation löst die Initialisierung aller Variablen und Container aus, die zum Auflösen des Klassenpfads erforderlich sind.  Viele Operationen von Java-Modellen führen implizit zur Auflösung des Java-Erstellungspfads.  Für die Berechnung der Stammverzeichnisse für ein Paketfragment eines Projekts beispielsweise ist die Auflösung des Erstellungspfads erforderlich.