In diesem Abschnitt wird beschrieben, wie der Java-Erstellungspfad festgelegt wird, d. h. der Klassenpfad für die Erstellung eines Java-Projekts. Ein Klassenpfad ist ein Bereich von Klassenpfadeinträgen, für verfügbare Typen im Quellen- oder Binärformat. Diese Klassenpfadeinträge werden zur Suche von verfügbaren Typen verwendet. Die Reihenfolge dieser Einträge definiert die Vorrangstellung der verfügbaren Typen.
Der Java-Erstellungspfad bestimmt auch die Struktur eines Java-Projektelements, da alle Paket-Fragment-Roots direkt vom Java-Erstellungspfad abgeleitet werden. (Jeder Eintrag wird einem oder mehreren Paket-Fragment-Roots zugeordnet, siehe getPackageFragmentRoots).
In diesem Abschnitt wird nicht der Java-Laufzeitpfad behandelt, der separat definiert werden kann. Siehe hierzu den entsprechenden Abschnitt zum Ausführen von Java-Programmen.
Sie können den Erstellungspfad eines Projekts programmgestützt unter Verwendung von
setRawClasspath für das entsprechende Java-Element des Projekts ändern. Beispiel:
IProject project = ... // get some project resource
IJavaProject javaProject = JavaCore.create(project);
IClasspathEntry[] newClasspath = ...;
javaProject.setRawClasspath(newClasspath, someProgressMonitor);
Beachten Sie, dass es auch eine Variante von setRawClasspath gibt, bei der der Java-Erstellungspfad und die Ausgabeadresse gleichzeitig definiert werden.
Der Java-Erstellungspfad wird in einer Datei namens '.classpath' unter der Projektadresse gespeichert. Diese Datei soll eine gemeinsame Benutzung der Einstellungen von Java-Erstellungspfaden und anderen Einstellungen über ein Quellcoderepository ermöglichen. Diese Datei sollte nicht manuell editiert werden, da sie sonst beschädigt werden könnte.
Klassenpfadeinträge können unter Verwendung von Methoden für Factory-Dienstprogramme, die unter JavaCore definiert sind, festgelegt werden, sodass sie auf eines oder mehrere der folgenden Elemente verweisen:
Beispieleintrag für den Quellenordner 'src' des Projekts 'MyProject': IClassPathEntry srcEntry = JavaCore.newSourceEntry(new Path("/MyProject/src");
Beispieleintrag für den Klassendateiordner 'lib' von 'MyProject':
IClassPathEntry libEntry = JavaCore.newLibraryEntry(
new Path("/MyProject/lib"),
null, //no source
null, //no source
false); //not exported
Beispieleintrag für eine externe JAR-Datei mit Quellenzuordnung:
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
Beispieleintrag für ein Vorbedingungsprojekt 'MyFramework', implizit in weitere abhängige Projekte exportiert:
IClassPathEntry prjEntry = JavaCore.newProjectEntry(new Path("/MyFramework"), true); //exported
Beispieleintrag für eine Bibliothek, auf die unter Verwendung einer Variable 'HOME'
verwiesen wird, wobei die Quellenzuordnung unter Verwendung der Variablen 'SRC_HOME' und 'SRC_ROOT' ebenfalls definiert ist:
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
Beispieleintrag für einen Container der Systemklassenbibliothek:
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);
Es ist auch möglich, den aufgelösten Klassenpfad eines Projekts abzufragen. Verwenden Sie dazu getResolvedClasspath. Diese Operation löst bei Bedarf die Initialisierung der enthaltenen Variablen und/oder Container aus. Beachten Sie, dass viele Operationen von Java-Modellen implizit die Auflösung des Java-Erstellungspfads auslösen. Die Datenverarbeitung einer Paket-Fragment-Root eines Projekts beispielsweise erfordert die Auflösung des Erstellungspfads.