Beispiel MUT Classpath Container: Unterschied zwischen den Versionen

Aus Eclipse
Wechseln zu: Navigation, Suche
(Die Seite wurde neu angelegt: Dieses Beispiel erläutert lediglich die auf der Seite Classpath Repräsentation in Eclipse beschriebenen Konzepte. Es ist nicht weiter angepasst und aus meiner Mas...)
 
K
 
Zeile 49: Zeile 49:
  
 
Über den so hinzugefügten ''Classpath Container'' steht jetzt allen Java Klassen in diesem Projekt die Annotation <tt>@MUT</tt> zur Verfügung. Damit kann sie verwendet werden, um Testmethoden mit denen von ihr getesteten Methoden zu verknüpfen.
 
Über den so hinzugefügten ''Classpath Container'' steht jetzt allen Java Klassen in diesem Projekt die Annotation <tt>@MUT</tt> zur Verfügung. Damit kann sie verwendet werden, um Testmethoden mit denen von ihr getesteten Methoden zu verknüpfen.
 +
[[Kategorie:Classpath]]

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

Dieses Beispiel erläutert lediglich die auf der Seite Classpath Repräsentation in Eclipse beschriebenen Konzepte. Es ist nicht weiter angepasst und aus meiner Masterarbeit übernommen. Ziel des Containers ist es eine Bibliothek MUT.jar, die in einem Plugin liegt, im Classpath der Java Projekte verfügbar zu machen, die in der Eclipse Installation angelegt werden, in der das Plugin installiert ist.

Der MUT Classpath Container

Um die @MUT Annotation auflösen zu können, muss diese im Erstellungspfad des Eclipse-Java-Projekts, in dem die Testmethode liegt, vorhanden sein. Dem Eclipse-Projekt muss also ein Classpath Entry für die JAR-Bibliothek hinzugefügt werden, der die Annotation enthält. Die verschiedenen Typen von Classpath Entries sind im Anhang A1 beschrieben.

Für eine Einbindung ohne das Hantieren mit Pfaden zu JAR-Dateien innerhalb des Eclipse-Plugins stehen zwei Typen von Classpath Entries zur Auswahl: Variable Classpath Entries und Classpath Container Entries. Obwohl ersterer Typ für die Einbindung einer einzelnen JAR-Bibliothek ausreichend wäre, kommt in diesem Plugin ein Classpath Container zum Einsatz. Die Nutzung von Classpath Containern ist in Eclipse weiter verbreitet und kommt auch für das Hinzufügen der Bibliotheken für JUnit zum Einsatz. Daher ist durch die Erstellung eines Classpath Containers eine konsistente Bedienung gewährleistet, die bei Interesse sogar in der Form erweitert werden kann, dass der MUT-Container neben der Annotation auch gleich die JUnit Classpath Entries mitbringen kann – alternativ wäre natürlich auch denkbar die Annotation zum Junit-Classpath-Container hinzuzufügen.

Ein Classpath Container kann einem Java-Projekt über die Erstellungspfad-Seite des Eigenschaftsdialogs des Projekts hinzugefügt werden. Abbildung 1 zeigt das Hinzufügen des Containers MUT, der von diesem Plugin bereit gestellt wird. Was für diese Bereitstellung konkret benötigt wird, ist im folgenden beschrieben.

Abbildung 1: Hinzufügen der MUT- Bibliothek zu einem Java Projekt


Die Definition eines Classpath Containers setzt sich aus zwei Teilen zusammen: der Implementierung der Erweiterungspunkte

  • org.eclipse.jdt.ui.classpathContainerPage und
  • org.eclipse.jdt.core.classpathContainerInitializer
1: <extension point="org.eclipse.jdt.ui.classpathContainerPage">
2:      <classpathContainerPage class="org.projectory.ezunit.internal.BuildPath.MUTClasspathContainerPage"
3:                              id="org.projectory.ezunit.MUT_CONTAINER"
4:                              name="MUT"/>
5: </extension>
Listing 1: Defintion der Classpath Container Page für die Bibliothek MUT


Listing 1 zeigt die Definition der Classpath Container Page für die Bibliothek MUT. In der Zeile 1 ist angegeben, dass es sich um eine Erweiterung für den Erweiterungspunkt org.eclipse.jdt.ui.classpathContainerPage handelt. In Zeile 4 wird der Name angegeben, der in der Liste aus Abbildung 1 zu sehen ist. Die Zeile 2 enthält den voll qualifizierten Namen einer Klasse, die das Interface org.eclipse.jdt.ui.wizards.IClasspathContainerPage implementiert. Sie stellt eine Seite für den Wizard aus Abbildung 1 bereit, auf der weitere Informationen zu dem hinzugefügten Container eingegeben werden können. Für den von Eclipse bereitgestellten Container „JRE System Library“ wird auf dieser Seite zum Beispiel die Java Runtime Environment ausgewählt, deren Bibliotheken dem Erstellungspfad des Projekts hinzugefügt werden sollen. Da für die @MUT Annotation keine weiteren Einstellungen nötig sind, fällt diese Seite, wie in Abbildung 2 ersichtlich, optisch sehr einfach aus.

Abbildung 2: Wizard Seite für das Hinzufügen des Bibliothek für die @MUT Annotation


In der Zeile 3 findet sich letztendlich die ID des Containers, der dem Projekt durch diese Wizard-Seite hinzugefügt werden soll. Diese ID muss identisch mit der ID sein, die für den classpathContainerInitializer angegeben ist, der weiter unten beschrieben wird.

Da die Klasse MUTClassPathContainerPage als zweites Interface auch noch org.eclipse.core.runtime.IExecutableExtension implementiert, kann die so angegebene ID in der Methode setInitializationData(...) ausgelesen werden. Auf Basis dieser ID kann dann ein org.eclipse.jdt.core.IClasspathEntry erzeugt werden, der von der Methode getSelection() als Ergebnis der Wizard-Seite zurück gegeben wird. Der übliche Typ für solch eine Wizard-Seite ist ein Container Classpath Entry.

Die tatsächliche Auflösung dieses IClasspathEntry Objekts in eine Menge von JAR-Bibliotheken, Quellcode-Ordnern und Projektreferenzen wird von der Klasse durchgeführt, die in der Erweiterung des Erweiterungspunkts org.eclipse.jdt.core.ClasspathContainerInitializer angegeben ist. In Listing 2 wird so die Klasse MUTClasspathContainerInitializer als die Klasse angegeben, die die Auflösung für Classpath Container Entries mit der ID org.projectory.ezunit.MUT_CONTAINER übernimmt.

1: <extension point="org.eclipse.jdt.core.
2:                   classpathContainerInitializer">
3:     <classpathContainerInitializer
4:          class="org.projectory.ezunit.internal.
5:          buildPath.MUTClasspathContainerInitializer"
6:          id="org.projectory.ezunit.MUT_CONTAINER"/>
7: </extension>
Listing 2: Defintion der Classpath Container Initializers für die Bibliothek MUT

Die so spezifizierte Klassse muss dabei eine Subklasse der Klasse org.eclipse.jdt.core.ClasspathContainerInitializer sein und deren abstrakte Methode initialize(...) implementieren. Aufgabe dieser Methode ist es, dem übergebenen IJavaProject einen IClasspathContainer hinzuzufügen. Konkret wird dem übergebenen Projekt von der Klasse MUTClasspathContainerInitializer eine Instanz der internen Klasse MUTContainer hinzugefügt, die im wesentlichen nur den Namen des Classpath Containers und einen Library Classpath Entry zurück gibt, der die JAR-Bibiothek lib/MUT.jar im Plugin referenziert. Da die weitere Implementierung dieser Klasse selbst erklärend ist, soll an dieser Stelle nicht näher darauf eingegangen werden.

Über den so hinzugefügten Classpath Container steht jetzt allen Java Klassen in diesem Projekt die Annotation @MUT zur Verfügung. Damit kann sie verwendet werden, um Testmethoden mit denen von ihr getesteten Methoden zu verknüpfen.