2012-11-07 8 views
11

In der Vergangenheit hatten wir unsere Bundles und Funktionen im Dateisystem und stellten sie in Eclipse über eine Zieldefinitionsdatei mit einem 'Verzeichnis' zur Verfügung. Auf diese Weise war es einfach, sie mit den Export-Assistenten in Eclipse zu verwenden.Verwendung eines Verzeichnisses mit Third-Party-Bundles in einem Tycho-Build

Jetzt versuche ich eine eclipse-plugin mit Tycho, die Abhängigkeiten von Drittanbietern, z. javax.vecmath und org.apache.commons.math.

Von dem, was ich weiß, ist der beste Weg, die Abhängigkeiten in einem Tycho-Build zu erhalten, durch ein p2-Repository. Also benutze ich eins für die Eclipse-Pakete. Bei meinen Drittanbieter-Bundles scheint jedoch kein p2-Repository verfügbar zu sein.

Meine Frage ist also: Wie bekomme ich einfach die JARs (vecmath, commons-math) in ein p2-Repository?

Ich dachte, ich könnte mit Tycho ein p2-Repository erstellen, aber wie kann ich das tun, wenn ich nicht auf die Third-Party-Pakete in Tycho zugreifen kann? Ich habe versucht, eine Zieldefinition zu verwenden, aber Tycho unterstützt nur Links zu p2-Repositories und nicht zu Verzeichnissen oder Installationen. Gibt es andere Möglichkeiten, meine Abhängigkeiten von Drittanbietern in einem Maven/Tycho-Build zu verwenden?

Antwort

0

Entsprechend Ihrer Frage sind die Abhängigkeiten von Drittanbietern bereits Bundles. Das ist gut – alles, was noch zu tun ist, ist p2 Metadaten für die Bündel zu generieren.

Dies kann problemlos über die Features and Bundles Publisher application erfolgen. Das Ergebnis ist ein p2-Repository. Natürlich möchten Sie nicht, dass all Ihre Entwickler dies lokal tun müssen, um den Tycho-Build auszuführen, also sollten Sie das Ergebnis der Publisher-Anwendung auf einem Webserver ablegen. Verweisen Sie dann die Bundles über eine HTTP-URL in der Zieldatei Ihres Projekts.

+0

Das war der einfachste und schnellste Weg, um ein P2-Repo zu erstellen. Danke an alle. – Timo

+4

Ich stimme nicht zu. Sie müssen die Seite manuell erstellen und wenn die Gläser keine Bündel sind, müssen Sie sie selbst "bündeln". All das ist banal, umständlich und könnte mit dem unten erwähnten p2-maven-plugin einfach automatisiert werden. Ich bin der Autor von p2-maven-plugin und habe es nur verschlüsselt, weil ich es sehr umständlich fand, die "Features and Bundles Publisher Application" zu verwenden. Probieren Sie p2-maven-plugin und Sie werden sehen, es ist viel einfacher als alles andere: https://github.com/reficio/p2-maven-plugin –

+0

Ja, ich stimme dem p2-Maven-Plugin sieht wie die beste Lösung . Der Umgang mit Abhängigkeiten von Drittanbietern in Eclipse/RCP-Projekten ist wirklich so schmerzhaft. Sieht so aus als ob p2-maven-plugin diesen Schmerz erheblich reduzieren kann, nur um irgendwo eine Liste zu führen und eine p2 update Seite von CI build zu veröffentlichen, damit wir sie in all unseren Tycho Builds verwenden können. – Kris

11

Ein paar verschiedene Optionen ...

P2-Plugin

Verwenden p2-maven-plugin alle Nicht-OSGi Abhängigkeiten in Bündel wickeln und eine p2-Repository erstellen.

Ich habe nicht versucht, p2-maven-plugin (es war nicht vorhanden, als ich mein aktuelles Projekt eingerichtet habe). Seine Implementierung basiert auf Tycho, aber Sie finden es möglicherweise eine bequemere Möglichkeit, Ihr Problem als nur die Tycho-Plugins zu lösen.

Bundle Plugin

Verwenden maven-bundle-plugin-Wrap Ihre Nicht-OSGi Abhängigkeiten (ein Wrapper pom pro Abhängigkeit), und in Ihrem Repository installieren. Ich denke, Commons-Mathe ist bereits eine Abhängigkeit, also müssen Sie vielleicht nur Vecmath einpacken. Sie könnten dann diese Abhängigkeiten in der <dependencies> Ihrer Tycho-basierten Pom-Dateien auflisten.

Dieser Ansatz hat den Vorteil, dass Sie kein p2-Repository nur zum Erstellen Ihres Projekts einrichten müssen. Der Nachteil ist, dass das Verwalten von Abhängigkeiten in Ihren Bundle-Projekten nicht länger nur dazu dient, die Datei MANIFEST.MF zu modifizieren: Sie müssen möglicherweise auch den Pom aktualisieren.

Bundle Plugin und Tycho

Wenn Sie den Bundle Plugin Ansatz verwenden, um Ihre Abhängigkeiten in OSGi-Bundles Verpackung, kann es immer noch nützlich sein ohnehin eine p2-Repository für diese Abhängigkeiten einzurichten, wie dies vereinfacht Einrichten der Zielplattform in Eclipse PDE.

Um dies zu tun, können Sie ein neues Tycho-Projekt erstellen, um die Abhängigkeiten in einem p2-Repository zu sammeln: die Abhängigkeiten, die bereits Bundles sind, zusammen mit den Wrapped-Versionen der Nicht-OSGi-Abhängigkeiten.Auf diese Weise listet das Projekt, das das p2-Repository erstellt, die eingepackten Abhängigkeiten in seinem pom auf, und Ihre Bundle-Projekte können das p2-Repository verwenden, ohne Abhängigkeiten in ihren Poms aufzulisten.

Dies ist der Ansatz, den ich verwende. Insbesondere verwende ich ein eclipse-feature Projekt, um eine Basis Funktion zu definieren, die alle Abhängigkeiten von Dritt-Anbieter enthält. Ich habe auch die Konfigurationsoption <deployableFeature> auf dem Verpackungs-Plugin auf true gesetzt, die ein p2-Repository im Zielverzeichnis erstellen wird. Diese Funktion kann in meine gewohnte Eclipse-Instanz installiert werden, wodurch die aktuelle Eclipse-Plattform als Zielplattform einfach zu verwenden ist. Es kann auch als p2-Repository verwendet werden, das an anderer Stelle im Tycho-Build (d. H. Nach meinem Code) oder als Repository in einer Eclipse .target-Datei verwendet werden kann.

Die eclipse-feature schien der beste Verpackungstyp in Tycho 0.13.0 zu sein. In neueren Versionen gibt es möglicherweise einen geeigneteren Verpackungstyp.

+0

Diese Antwort eher beantwortet diese Frage: http://stackoverflow.com/q/29664505/1523648 – oberlies

1

ein guter Platz für 3rd-Party-Bündel Gläser in p2 repos zu sehen ist Eclipse Orbit

http://download.eclipse.org/tools/orbit/downloads/

commons.math da drin ist.

Wenn Ihr 3rd-Party-OSGi-Bundle nicht verfügbar in einem p2 Repo ist, aber in einem Maven Repo wie

http://search.maven.org/

Sie Tychos pomDependency verwenden = prüfen Schalter:

http://wiki.eclipse.org/Tycho/How_Tos/Dependency_on_pom-first_artifacts

+0

Ich habe den Orbit schon vor ein paar Minuten gefunden, es ist wirklich praktisch. Der andere Rat sieht interessant aus, danke. – Timo