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.

3 Kommentare:

  1. Hallo Chris,
    ich hätte mal eine Frage. Ich habe Tycho (0.10-SNAPSHOT ) anhand dieser Anleitung gebaut:
    http://tycho.sonatype.org/buildingtycho.html

    Jedoch kommt es mir so vor als ob maven nichts von tycho weiß. Jedesmal beim "mvn clean install" kommt da eine Error meldung "Unknown packaging : eclipse-plugin"
    Da es ein packaging type von tycho ist nehme ich an maven weiß noch nichts von tycho. Weißt du eine Lösung?

    AntwortenLöschen
  2. Hallo,

    klingt für mich zunächst so, als wäre in der POM des zu bauenden Projekts nicht das "tycho-maven-plugin" referenziert wäre.

    In seinem Tutorial erzeugt Mattias Holmqvist die POMs ja automatisch und die Infos stehen so nicht direkt im Text. In seinem Github-Account (http://github.com/mattiasholmqvist/tychoexamples) liegen die POMs aber und dort steht, wie es aussehen sollte, konkret in der Parent-POM (http://github.com/mattiasholmqvist/tychoexamples/blob/master/se.mattiasholmqvist.tychoexamples.parent/pom.xml)

    Unter build/plugins/plugin das org.sonatype.tycho:tycho-maven-plugin eintragen. (sorry, XML-Code in Kommentare kopieren funktioniert hier nicht richtig gut, deswegen hier ein Link auf meinen kleinen Auszug aus der POM: http://pastie.org/1046151

    Hoffentlich hilft das so. Ansonsten poste doch mal bitte Deinen Output von Maven (mit -X und -e Option), am einfachsten auch nach pastie...

    Schöne Grüße aus Hamburg

    Chris

    AntwortenLöschen
  3. Hallo Chris,
    vielen Dank für den Hinweis!
    Ich habe es nun endlich zum laufen gebracht. Es lag an der POM Konfiguration.

    Gruß Tom

    AntwortenLöschen