Freitag, 25. Juni 2010

OSGi-Bundles bauen mit Tycho

Hallo,

ich habe mit Hilfe des Tutorials von Mattias Holmqvist (Teil 1, Teil 2 und Teil 3) unser Projekt vom Headless PDE-Build bzw. BND-Build umgestellt auf Tycho.

Zunächst einmal: Es geht erstaunlich einfach. Das Tutorial ist unglaublich präzise. Und tycho funktioniert schon in der Version 0.8 sehr gut, die gerade die aktuelle ist (0.10-SNAPSHOT wollte ich nicht nehmen).

Aber natürlich gab es auch noch ein paar Probleme, die kein noch so gutes Tutorial aus der Welt schaffen kann. Ich liste die einfach mal hier auf, damit andere bei ähnlichen Problemen eine Hilfe bekommen:

Source- und Target-Versionen für den Code


Wir verwenden für unseren Source Java Version 6-Features, insbesondere @Override-Annotationen auch für Methoden, die Interface-Methoden überschreiben. Das resultiert dann in einem Fehler "must override a superclass method".

Das wollte ich zunächst mit einer Plugin-Konfiguration in der parent-pom lösen, hier hat aber Tycho in der Version 0.8 noch ein Problem.

Aber das osgi-compile-Plugin verwendet aber die gleichen Properties zur Konfiguration wie das "normale" compile-Plugin, ich konnte also einfach die Properties maven.compiler.source=6 und maven.compiler.target=6 in der Parent-POM setzen.

In zukünftigen Versionen wird Tycho diese Information aus dem Manifest ziehen.

eclipse-application


Wir hatten bisher die .product-Datei in einem ganz normalen Bundle zusammen mit ein paar Java-Klassen, den entsprechenden Ressourcen etc. Tycho baut ein eclipse-application-Bundle aber nicht als Bundle, so dass es ich einfach genau so gemacht habe, wie Mattias Holmqvist es als sein Standard-Vorgehen beschreibt: Ich habe ein eigenes Plugin in der Eclipse IDE angelegt, das nur die foo.bar.product-Datei enthält. Dieses muss noch nicht einmal als PDE-Projekt angelegt sein. Noch schnell eine POM für dieses Projekt geschrieben (wie beschrieben in Teil 2) und in die Parent-POM eingetragen.

Verschachtelte Projekte


Tycho arbeitet im Moment nur mit P2-Repositories, nicht aber mit dem Maven-Repository. Es ist also nicht möglich, die verschiedenen Layer einer Applikation aufeinander aufbauend in separaten Builds zu bauen. Also muss die Parent-POM wirklich alle Module auf einmal bauen.

Soweit dazu, aber selbst mit diesen kleinen Problemchen hatte ich mit tycho meine Eclipse-Applikation schneller gebaut als mit dem PDE-Build oder mit dem BND-Plugin.