Classpath Repräsentation in Eclipse: Unterschied zwischen den Versionen

Aus Eclipse
Wechseln zu: Navigation, Suche
(Die Seite wurde neu angelegt: Beim Start eines Java Programms kann über den Kommandozeilenparamter -classpath angegeben werden, in welchen Verzeichnissen und Bibliotheken (JAR-Dateien) nach Klassen...)
 
K
 
Zeile 71: Zeile 71:
  
 
Für ein Beispiel zur Anwendung dieser beiden Erweiterungspunkte sei an dieser Stelle auf die Seite [[Beispiel MUT Classpath Container]] verwiesen.
 
Für ein Beispiel zur Anwendung dieser beiden Erweiterungspunkte sei an dieser Stelle auf die Seite [[Beispiel MUT Classpath Container]] verwiesen.
 +
 +
[[Kategorie:Classpath]]

Aktuelle Version vom 15. Juli 2010, 15:13 Uhr

Beim Start eines Java Programms kann über den Kommandozeilenparamter -classpath angegeben werden, in welchen Verzeichnissen und Bibliotheken (JAR-Dateien) nach Klassen gesucht werden soll, die zur Laufzeit des Programmes diesem zur Verfügung stehen. In Eclipse werden die einzelnen Elemente, aus denen sich dieser Klassenpfad zusammensetzt, als Objektinstanzen dargestellt, denen gemeinsam ist, dass ihre zugrunde liegende Klasse das Interface org.eclipse.jdt.core.IClasspathEntry implementiert. In [ JDT API ] wird bei der Beschreibung des Interfaces IClasspathEntry dabei zwischen fünf Typen unterschieden:

  • Quell-Ordnern in Projekten, die .java Dateien enthalten, Source Classpath Entries genannt.
  • Ordner oder JAR-Bibliotheken, die .class Dateien enthalten, Library Classpath Entries genannt.
  • Referenzen zu anderen Java-Projekten, Required Project Classpath Entries genannt.
  • Referenzen auf ein Projekt oder eine Bibliothek, die mit einer Variable beginnen, Variable Classpath Entries genannt.
  • Benannte Container, die andere IClasspathEntry-Typen enthalten können, Classpath Container Entries genannt.


Abbildung 23: Bearbeitung des Erstellungspfades eines Java Projekts


Abbildung 23 zeigt den Dialog für die Bearbeitung der Elemente des Erstellungspfades eines Java Projekts in Eclipse. Dabei fügen die folgenden Schaltflächen Classpath Entries vom jeweils angegebenen Typ hinzu:

  • Reiter „Source“: Source Classpath Entries
  • Reiter „Projects“: Project Classpath Entries
  • „Add JARs“, „Add External JARs“ und „Add Class Folder“: Library Classpath Entries
  • „Add Variable“: Variable Classpath Entries
  • „Add Library“: Container Classpath Entry


Im folgenden wird das Wort Bibliothek nicht weiter für Container Classpath Entries verwendet, um eine Verwechslung mit dem Begriff JAR-Bibliothek zu vermeiden, der lediglich eine einzelne JAR Datei als Sammlung von Klassen meint.

Um in ein Java-Projekt JAR-Bibliotheken einzubinden, die von einem Plugin mitgeliefert werden, eignen sich vor allem die beiden letzten Classpath Entry Varianten, da sie es ermöglichen, einem Projekt eine Referenz hinzuzufügen, die je nach Workspace, in dem das Projekt geöffnet ist (zum Beispiel auf unterschiedlichen Rechnern), unterschiedlich aufgelöst wird.

Die Variablen für einen Variable Classpath Entry können dabei entweder manuell angelegt werden (siehe Abbildung 24) oder über den Erweiterungspunkt org.eclipse.jdt.core.classpathVariableInitializer von einem Plugin erstellt werden. Im folgenden soll der Fokus vor allem auf der zweiten Variante liegen.

Abbildung 24: Erstellen einer Variable zum Hinzufügen eines Variable Classpath Entries


Listing 36 zeigt eine entsprechende Erweiterung, die eine Variable mit dem Namen „MUT_LIBRARY“ definiert. Die Initialisierung der Variable geschieht in der Klasse MUTClasspathVariableInitializer, die in den Zeilen 4 und 5 angegeben ist. Diese muss eine Kindklasse der Klasse org.eclipse.jdt.core.ClasspathVariableInitializer sein und deren abstrakte Methode initialize(...) implementieren.

1: <extension point="org.eclipse.jdt.core.
2: classpathVariableInitializer">
3: <classpathVariableInitializer
4: class="org.projectory.ezunit.buildPath.
5: MUTClasspathVariableInitializer"
6: variable="MUT_LIBRARY"/>
7: </extension>
Listing 36: Defintion des Classpath Variable Initilizers für die Variable MUT_LIBRARY

Listing 37 zeigt eine Implementierung dieser abstrakten Methode, die die Variable „MUT_LIBRARY“ an die JAR-Bibliothek MUT.jar im Verzeichnis lib des EzUnit-Plugins bindet.

1: public void initialize(String variable) {
2: Bundle bundle = EzUnitPlugin.getDefault().getBundle();
3: if (bundle != null) {
4: try {
5: URL local = FileLocator.
6: toFileURL(bundle.getEntry("/lib/MUT.jar"));
7: String fullPath = new
8: File(local.getPath()).getAbsolutePath();
9: IPath path = Path.fromOSString(fullPath);
10: JavaCore.setClasspathVariable(variable, path, null);
11: } catch (IOException e) {
12: ...
13: } catch (JavaModelException e) {
14: ...
15: }
16: }
17: }
Listing 37: Beispielhafte Implementierung der Methode initalize(....) eines Classpath Variable Initilizers für die Variable MUT_LIBRARY

Analog zu den Variable Classpath Entries können auch Container Classpath Entries manuell angelegt werden. Der entsprechende Punkt in den Eclipse-Voreinstellungsdialog nennt analog zur Konfiguration des Erstellungspfades eines Eclipse-Projekts User Libraries. Abbildung 25 zeigt eine manuell angelegte Bibliothek „MUT_USER_LIBRARY“, die lediglich eine JAR-Bibliothek enthält.

Abbildung 25: Anlegen einer MUT User Library

Für die automatische Auflösung eines Classpath Container Entries kommt die Erweiterung org.eclipse.jdt.core.classpathContainerInitializer zum Einsatz. Im Unterschied zu Variablen, die direkt nach der Definition einer classpathVariableInitializer Erweiterung im Dialog für das Hinzufügen einer Variable zum Erstellungspfad zur Verfügung stehen, ist dazu für Classpath Container Entries noch eine Erweiterung des Punktes org.eclipse.jdt.ui.classpathContainerPage hinzuzufügen. Diese definiert einen Namen, unter dem der Container angezeigt wird und stellt eine Wizard-Seite zur Verfügung in der weitere Einstellungen zu dem Container beim Hinzufügen zu einem Projekt abgefragt werden können.

Für ein Beispiel zur Anwendung dieser beiden Erweiterungspunkte sei an dieser Stelle auf die Seite Beispiel MUT Classpath Container verwiesen.