# Maven2 und Eclipse Bundles



## byte (10. Jul 2009)

Hi,

ich versuche derzeit, die Server-Komponente eines Projekts auf Maven2 umzustellen. Nun ist es so, dass diese Server-Komponente Abhängigkeiten zu zwei anderen Java-Projekten hat. Diese Projekte sind Eclipse Bundles mit entsprechendes Manifests.

Diese Abhängigkeiten kriege ich doch nur aufgelöst, indem ich auch diese beiden Eclipse Plugins auf Maven2 umstelle, richtig?

Und genau da hakt es derzeit bei mir. Ich weiss nicht, wie ich Eclipse Plugins mit Maven2 verheiraten kann. Wenn ich versuche, mithilfe von m2eclipse Maven2 zu den Eclipse Plugins hinzuzufügen, dann bekomme ich diverse Fehler in der Manifest des Plugins, mit denen ich nichts anfangen kann. Ausserdem fliegen mir andere Plugins um die Ohren, die eine Abhängigkeit auf dieses Plugin haben.

Kennt jemand Tutorials oder kann mir einfach erklären, wie man Eclipse Plugins am besten auf Maven2 umstellen kann, so dass sie sowohl von anderen (nicht-maven) Eclipse Plugins als auch von anderen (nicht eclipse-plugin) Maven-Projekten verwendet werden können?

Am liebsten wärs mir, wenn ich diese Plugins einfach so lassen könnte, aber dann kriege ich die Abhängigkeit im Server-Projekt nicht mehr aufgelöst. Oder kann man in einem Maven2 Projekt auch eine Abhängigkeit auf ein Nicht-Maven-Projekt setzen?

Über sachdienliche Hinweise wäre ich dankbar. 

TIA byto


----------



## maki (10. Jul 2009)

Hi byto,

werde mal versuchen zu antworten, wobei ich sagen muss das ich keine Erfahrung mit Eclipse Plugins habe, nur mit "normalen" OSGi Bundles.

Maven wird versuchen die Dependencies (OSGi Bundles, jars, etc. pp.), über die sog. (Artifakt-) Repositories aufzulösen und dann von dort runterzuladen, zuerst aus dem lokalen Repo (unter .m2), danach über die konfigurierten Remote Repositories.

Wenn du keine Lust hast alle Abhängigkeiten zu Maven Projekten umzubauen wie zB. für einen "Proof of Concept", kannst du die Abhängigkeiten auch manuell ins lokale oder remote repository hochladen.

Um ein Maven Projekt für ein OSGi Bundle zu erstellen, gibt du als Packaging "bundle" an.
Um die OSGi Bundles zu erzeugen, habe ich das Felix Maven Plugin genutzt, es basiert auf dem BND Tool: Apache Felix - Apache Felix Maven Bundle Plugin (BND)
Am Anfang ist es etwas gewöhnungsbedürftig, da es nciht so einfach ist wie mit dem Eclipse Wizards, aber schwer ist es nicht wirklich. Das Plugin wird versuchen alle Export & Imports selbst zu ermitteln und erzeugt das Manifest, nur manchmal muss man selber zus.  festlegen, weil sie zB. über reflection importiert werden(Hibernate ist ein gutes Beispiel). Jedenfalls editiert man die Manifest nicht mehr manuell oder mit Eclipse, sondern konfiguriert das Felix Plugin.
 Es gibt allerdings ein paar Unterschiede zwischen den Standard OSGi Manifest einträgen und dem, was Eclipse erzeugt, konnte aber bisher immer erreichen wa sich wollte.
So ein erzeugten OSGi Bundle ist ein ganz normales OSGi Bundle.

Erzähle doch mal wo es gerade bei dir Hackt, vielleicht kann ich ja helfen 

Nachtrag: Das SpringDM Projekt kommt schon mit Beispielen in Maven, kannst dir das als Beispiel mal ansehen.


----------



## byte (10. Jul 2009)

Danke für Deine Antwort.

Ich habs jetzt doch vorerst lösen können, indem ich einfach über m2eclipse den Maven2 Support fürs Plugin aktiviert habe. Das Problem war einfach, dass danach das danach der src-Folder beim Plugin nicht mehr im Buildpath war. Daher kamen die ganzen Compilerfehler.

Ich hab nun den Srcfolder wieder manuell (per Eclipse) dem Buildpath hinzugefügt und dann die Maven Dependancies konfiguriert. Nun scheint es zu funktionieren, ist aber nicht wirklich schön gelöst, weil die Dependancies jetzt quasi doppelt gepflegt sind, einmal in der pom.xml und einmal in der Manifest.

Ich werds jetzt erstmal so lassen, weil ich wie gesagt eigentlich nur den Server migrieren will und den Client (also die ganzen Eclipse Bundles) vorerst lassen möchte, wie sie sind.

Evtl. gucke ich mir dann später nochmal an, wie ich den Client Part auch auf Maven migrieren kann. Die Problematik ist halt, dass wir auf Client-Seite ein firmeninternes Framework verwenden, das in Form von diversen Eclipse Bundles ausgeliefert wird, die aber alle nicht mit Maven gebaut sind. Von daher schrecke ich da etwas zurück, zumal ich grade erst mit Maven2 anfange.


----------



## maki (10. Jul 2009)

Ja, Maven2 hat eine Lernkurve, persönlich fand ich (nachdem ich schon länger EARs, jars und WebApps mit Maven gebaut/konvertiert hatte) den Einstieg in OSGi mit Maven2 etwas gewöhnungsbedürftig, weil ich von OSGi keine Ahnung hatte.Denke es gibt auch einen Weg eine vorhandene MANIFEST zu nutzen, müsste zwar suchen, aber falls interesse besteht einfach sagen.


----------



## byte (10. Jul 2009)

Danke, komme evtl. später drauf zurück. Jetzt möchte ich aber erstmal Maven2 grundsätzlich zum Laufen bringen und da wird sicher noch die eine oder andere Frage auftauchen.

Hab jetzt erstmal die beiden Plugins auf o.g. Art mavenized und mache mich nun an die Server-Komponente. Der ist mir erstmal am wichtigsten, da dort die meisten Abhängigkeiten aufgelöst werden müssen (Spring, Hibernate und Co. KG  ). Werd da sicher noch die eine oder andere Frage stellen, wie ich dann meine Test, QS und Prod Builds am besten machen kann.


----------



## Wildcard (12. Jul 2009)

Schau dir Eclipse Buckminster an, für genau solche Situationen ist es gedacht.
Für Buckminster sind Maven Artefakte, OSGi Bundles und vieles andere gleichwertig und die Sache lässt sich wunderbar verheiraten. Für reine Maven Projekte nimmst du weiterhin Maven, und wenn Maven auf die nicht-Maven Welt trifft lässt du die Dependencies von Buckminster auflösen.


----------

