In diesem Abschnitt wird beschrieben, wie der Java-Erstellungspfad festgelegt wird. Der Erstellungspfad ist der Klassenpfad, der bei der Erstellung eines Java-Projektes(IJavaProject) verwendet wird.
Ein Klassenpfad ist einfach ein Bereich von Klassenpfadeinträgen(IClassPathEntry), der die verfügbaren Typen beschreibt. 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 ist in der Struktur eines Java-Projektelements wiedergegeben. Sie können ein Projekt nach den Stammverzeichnissen seiner Paketfragmente(IPackageFragmentRoot) abfragen. Jeder Klassenpfadeintrag ist einem oder mehreren Stammverzeichnissen für Paketfragmente zugeordnet, die jeweils wiederum eine Gruppe von Paketfragmenten enthalten.
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.
Sie können den Erstellungspfad eines Projekts programmgestützt 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 ist in einer Datei namens ".classpath" in der Dateistruktur des Projektes permanent definiert. Diese Datei soll eine gemeinsame Benutzung der Einstellungen von Java-Erstellungspfaden und anderen Einstellungen über ein Quellcoderepository ermöglichen. Diese Datei sollte nicht manuell bearbeitet werden, da sie sonst beschädigt werden könnte.
Klassenpfadeinträge können unter Verwendung von Methoden für Factorydienstprogramme, die unter JavaCore definiert sind, festgelegt werden. Klassenpfadeinträge können auf eines oder mehrere der folgenden Elemente verweisen:
Das folgende Beispiel ist ein Klassenpfadeintrag,
der den Quellenordner "src" des Projektes "MyProject" angibt:
IClassPathEntry srcEntry = JavaCore.newSourceEntry(new Path("/MyProject/src");
Das folgende Beispiel ist ein Klassenpfadeintrag, der den Klassendateiordner "lib" von "MyProject" angibt:
IClassPathEntry libEntry = JavaCore.newLibraryEntry(
new Path("/MyProject/lib"),
null, //no source
null, //no source
false); //not exported
Dem folgenden Klassenpfadeintrag ist eine Quelle zugeordnet:
IClassPathEntry libEntry = JavaCore.newLibraryEntry(
new Path("d:/lib/foo.jar"), // library location
new Path("d:/lib/foo_src.zip"), //source archive location
new Path("src"), //source archive root path
true); //exported
Der Stammverzeichnispfad des Quellenarchivs beschreibt die Position des Stammverzeichnisses innerhalb des Quellenarchivs. Ist er auf Null gesetzt, wird das Stammverzeichnis des Archivs dynamisch heruntergesetzt.
Der folgende Klassenpfadeintrag gibt ein Vorbedingungsprojekt namens "MyFramework" an.
IClassPathEntry prjEntry = JavaCore.newProjectEntry(new Path("/MyFramework"), true); //exported
Es ist möglich, einen automatischen Initialisierungsoperator für Klassenpfadvariablen zu registrieren, der über den Erweiterungspunkt org.eclipse.jdt.core.classpathVariableInitializer aufgerufen wird, wenn der Arbeitsbereich gestartet wird.
Der folgende Klassenpfadeintrag gibt eine Bibliothek an, deren Position in der Variablen
HOME festgehalten ist. Die Quellenzuordnung wird mit Hilfe der Variablen
SRC_HOME und SRC_ROOT definiert:
IClassPathEntry varEntry = JavaCore.newVariableEntry(
new Path("HOME/foo.jar"), // library location
new Path("SRC_HOME/foo_src.zip"), //source archive location
new Path("SRC_ROOT"), //source archive root path
true); //exported
JavaCore.setClasspathVariable("HOME", new Path("d:/myInstall"), null); // no progress
Es ist möglich, einen automatischen Initalisierungsoperator für Klassenpfadcontainer zu registrieren, der über den Erweiterungspunkt org.eclipse.jdt.core.classpathContainerInitializer aufgerufen wird, wenn der Container gebunden werden muss.
Der folgende Klassenpfadeintrag gibt einen Container für eine Systemklassenbibliothek an:
IClassPathEntry varEntry = JavaCore.newContainerEntry(
new Path("JDKLIB/default"), // container 'JDKLIB' + hint 'default'
false); //not exported
JavaCore.setClasspathContainer(
new Path("JDKLIB/default"),
new IJavaProject[]{ myProject }, // value for 'myProject'
new IClasspathContainer[] {
new IClasspathContainer() {
public IClasspathEntry[] getClasspathEntries() {
return new IClasspathEntry[]{
JavaCore.newLibraryEntry(new Path("d:/rt.jar"), null, null, false);
};
}
public String getDescription() { return "Basic JDK library container"; }
public int getKind() { return IClasspathContainer.K_SYSTEM; }
public IPath getPath() { return new Path("JDKLIB/basic"); }
}
},
null);
Einem Klassenpfadquelleneintrag kann ein Ausschlussmuster zugeordnet sein, das die Sichtbarkeit bestimmter Ressourcen eines Quellenordners im Klassenpfad verhindert. Durch die Verwendung eines Musters können bestimmte Teile der Ressourcenstruktur herausgefiltert werden. Jeder Ausschlussmusterpfad wird relativ zum Klassenpfadeintrag definiert und verwendet einen ähnlichen Mustermechanismus wie Ant. Mit Ausschlussmustern können verschachtelte Quellenordner angegeben werden, sofern das äußere Muster das innere Muster ausschließt.
Weitere Details zu Ausschlussmustern können Sie untergetExclusionPatterns() nachlesen.
Die Java-Projekt-API isOnClasspath überprüft die Ausschlussmuster, bevor sie ermittelt, ob eine bestimmte Ressource im Klassenpfad enthalten ist.