Verwendung von Faktor-IPS-Projekten als OSGi-Bundles

Einführung

Abhängigkeiten zwischen Faktor-IPS-Projekten wurden bisher mit dem „Faktor-IPS Build Path“ im Eigenschaftsdialog eines Faktor-IPS-Projekts verwaltet. Ab der Version 3.9 von Faktor-IPS gibt es zusätzlich die Möglichkeit, diese Abhängigkeiten auf Basis von OSGi in einem Manifest zu pflegen. Für Anwender ergeben sich dadurch neue Nutzungsszenarien:

  • Java-, Plugin- und Faktor-IPS-Abhängigkeiten können im Manifest und damit an einer Stelle verwaltet werden.

  • Die Abhängigkeiten und Versionen können mit dem Industriestandard OSGi verwaltet werden.

  • In Produktdatenprojekten können die Modelldefinitionen einfach mit dem Software-Update-Mechanismus von Eclipse aktualisiert werden.

Wichtig: Um diese Funktionen nutzen zu können, muss Eclipse PDE installiert sein und alle Projekte müssen den Plugin-Container im Classpath haben. Letzteres ist automatisch der Fall, wenn es sich um ein Plugin-Projekt handelt. Im Package-Explorer kann über Kontextmenü unter Konfigurieren ein Java-Projekt zu einem Plugin-Projekt umgewandelt werden.

Referenzieren von Faktor-IPS-Projekten

Um Abhängigkeiten zu anderen Projekte zu definieren, müssen diese als OSGi Bundle vorliegen. Dazu muss eine MANIFEST.MF Datei mit mindestens folgenden Einträgen existieren (siehe Verwendung des Manifest für Faktor-IPS-Projekte):

Bundle-ManifestVersion: 2
Bundle-Name: <Name des Projekts>
Bundle-SymbolicName: <ID des Projekts>
Bundle-Version: <version>

Die erste Zeile legt lediglich die Version des OSGi Bundle Manifest fest und sollte so übernommen werden. Bundle-Name legt den Namen des Projekts fest. Dieser Name muss nicht eindeutig sein und darf auch Leerzeichen enthalten. Bundle-SymbolicName legt dagegen den eindeutigen Namen des Projekts fest und wird später verwendet, um die Abhängigkeit zu definieren. Die Bundle-Version legt die aktuelle Version des Projekts fest und kann zu Einschränkungen von Abhängigkeiten genutzt werden. Das Format der Version ist x.x.x.qualifier, wobei jedes x einer Zahl entspricht und der Qualifier alphanumerisch ist.

Damit auch die Abhängigkeiten für den Java Sourcecode richtig funktionieren, muss außerdem noch darauf geachtet werden, dass alle notwendigen Packages exportiert werden.

Weitere Einstellungsmöglichkeiten für OSGi Bundles können in der OSGi Spezifikation eingesehen werden.

Um ein anderes Bundle zu referenzieren, wird dieses im Manifest mit dem Header Require-Bundle referenziert:
Require-Bundle: <ID des Projekts>;bundle-version="<version>"

Bei der Version können auch Bereiche oder ungenaue Versionen angegeben werden, z.B.:

[1.0.0,1.1.0)

Von 1.0.0 eingeschlossen bis 1.1.0 ausgeschlossen

1.0

Alle Versionen, die mit 1.0 beginnen

Die referenzierten OSGi Bundles können als Projekt im Workspace oder als (gepacktes) OSGi Bundle vorliegen. Die Einstellungen zum IpsObjectPath müssen wie oben beschrieben im Manifest definiert sein. Wenn das Bundle nicht im Workspace liegt, muss es über die eingestellte Target Platform erreichbar sein (siehe unten).

Die Einstellungen im Manifest können bequem über den Plugin Manifest Editor bearbeitet werden. Dieser enthält jedoch (zumindest in Eclipse 3.7) einen Fehler, wenn zusätzliche Abschnitte (z.B. zur Konfiguration eines weiteren Fips-ObjectDir, siehe oben) im Manifest enthalten sind. In diesem Fall ist im Manifest darauf zu achten, dass alle Einstellungen vor der ersten Leerzeile getroffen werden.