Tycho und Eclipse: So lösen Sie OSGI-Abhängigkeiten zur Entwicklungszeit in Eclipse in eigene Bundles auf, ohne alle in der IDE zu öffnen

Hintergrund

Meine Eclipse RCP-Anwendung wird mit Tycho erstellt. Es besteht aus mehreren Komponenten (in Form von OSGi-Bundles / Eclipse-Plug-Ins). Eine dieser Komponenten enthält die Produktdatei und materialisiert das Produkt.

Es gibt ein Reaktor - POM im Anwendungsstamm, das alle Komponenten der Reihe nach erstellt, aber ich möchte auch andere Komponenten unabhängig erstellen (mithilfe vonmvn deploy).

Das Erstellen einer solchen einzelnen Komponente funktioniert wie folgt:

Rufen Sie die neuesten Versionen aller Abhängigkeiten der Komponente aus unserem Unternehmensrepository (p2) ab.Erstellen Sie die Komponente.Stellen Sie die Komponente in unserem Unternehmensrepository bereit, um sie als Abhängigkeit für andere Komponenten selbst zu verwenden.

Hinweis: Unser Repository ist normalmaven2 Repository auf einem Nexus, dessen RCP-Artefakte automatisch auch einem p2-Repository-Format zugeordnet werden. Auf diese Weise kann Tycho das p2-Repository-Format verwenden, um Abhängigkeiten zu finden, während die Standard-Maven-Bereitstellung verwendet werden kann. Das funktioniert gut.

Hinweis: Mein übergeordnetes POM stellt sicher, dass wir unter der URL des p2-Repository nach Abhängigkeiten suchen. Die Bereitstellungs-URL ist der Standardspeicherort des Repository im Format maven2. Das funktioniert gut.

Problem

Wenn Sie eine solche einzelne Komponente über die Befehlszeile erstellen (mvn deploy), Sucht Mavenprojektintern Abhängigkeiten im p2-Repository und sie werden korrekt aufgelöst (d. h. die neueste Version wird automatisch heruntergeladen und im Build verwendet).

Bei der Entwicklung in Eclipse kann die IDE sie jedoch nicht auflösen. In den Manifestdateien wird bei allen projektinternen Abhängigkeiten ein Fehler angezeigt, der nicht behoben werden kann.

Frage

Meine Frage lautet: Wie kann ich die Eclipse-IDE dazu bringen, nach Abhängigkeiten (und neuen Versionen von Abhängigkeiten) zu suchen?

Mein lokales p2-Repository (~/.m2/repository/p2/osgi/bundles)Mein Firmen-p2-Repository (nexus.mycompany.com/myproduct-snapshots/.meta/p2)

Im Idealfall wird jedes Mal nach ihnen gesucht und die neueste Version abgerufen, wenn eine neuere Version verfügbar ist.

Wie kann ich Eclipse konfigurieren, wenn die p2-Repository-URLs im POM nicht verwendet werden?

Beispiel

Betrachten Sie ein Eclipse-Plug-Incom.mycompany.myproduct.fancy, was von einem anderen Eclipse-Plugin abhängtcom.mycompany.myproduct.core.

Beide haben auch ein POM (für Tycho konfiguriert), in dem (über das übergeordnete POM) meine Nexus-Repositorys korrekt konfiguriert sind: die URL des maven2-Repositorys für die Bereitstellung und die URL des p2-Repositorys für die Suche nach Abhängigkeiten.

Zuerst setze ich diecore Plug-In für mein Maven-Repository (unter Verwendung der Standardeinstellung)mvn deploy). Das Nexus-Repository wird dieses bereitgestellte Plug-In sowohl im Maven- als auch im P2-Format bereitstellen.

Wenn ich die bauefancy Komponente über die Befehlszeile (mitmvn install) wird die (früher eingesetzte) Kernkomponente automatisch gefunden und heruntergeladen.

project/com.mycompany.myproduct.fancy$ mvn clean install
<searches in p2 repository, download core>
<builds fancy>
<SUCCESS>

Wenn ich einen neuen Eclipse-Arbeitsbereich öffne und den öffnefancy Komponente, sein Manifest (das seine Abhängigkeiten enthält) gibt den folgenden Fehler aus:

Bundle 'com.mycompany.myproduct.core' cannot be resolved.

Meine Frage ist: Wie kann ich das entwickeln?fancy Komponente in der Eclipse-IDE, ohne sie öffnen zu müssencore als Projekt in Eclipse.

Spekulation

Das sind einige Spekulationen von meiner Seite. Bitte korrigieren Sie mich, wenn ich falsch liege und jede andere Lösung für das eigentliche Problem ist auch willkommen!

Ich kenne dasm2e Das Plug-In der Eclipse-IDE ordnet derzeit Maven-POMs Eclipse-Konzepten zu (unter Verwendung von m2e-Konnektoren). Ich habe die dedizierten Tycho-Anschlüsse installiert. Beispielsweise wird der Kompilierungsschritt mvn tatsächlich vom Eclipse-JDT-Compiler ausgeführt.

Ich weiß auch, dass ein vollständiges Tycho-Produkt, das in Eclipse gestartet wird, in der Eclipse-PDE-Umgebung ausgeführt wird. Beispielsweise muss ich in meiner Run-Konfiguration eine Zielplattform angeben.

Ich weiß, dass ich alle Komponenten in meinem Eclipse-Arbeitsbereich öffnen kann. Dies würde das Problem lösen, ist aber nicht realisierbar, da ich viele Komponenten habe und dies die unabhängige Komponentenentwicklung unterbrechen würde.

Ich gehe davon aus, dass das Eclipse m2e-Mapping und / oder die PDE-Build-Umgebung nicht intelligent genug sind, um (neueste) Abhängigkeiten zum Build-Zeitpunkt automatisch abzurufen. Bitte korrigieren Sie mich, wenn ich falsch liege. :)

Daher gehe ich davon aus, dass ich die Zielplattform auch zum Zeitpunkt der Erstellung angeben muss. Ich habe einen Blick darauf geworfenFenster> Einstellungen> Plug-in-Entwicklung> Zielplattform. Ich kann unser p2-Repository zur Zielplattform hinzufügen, wodurch das Problem behoben wird. Dies gibt jedoch viele Probleme:

Ich benötige ein Feature, das alle Komponenten enthält, damit dies funktioniert. Es können nur Features hinzugefügt werden.Jedes Mal, wenn ich einen neuen Build einer einzelnen Komponente bereitstelle, muss ich das gesamte Feature neu erstellen (um eine neue Feature-Version in unserem p2-Repository zu erstellen).Jedes Mal, wenn ich eine Komponente aktualisiere und das Feature erstelle, muss ich die Zielplattform manuell ändern.

Wenn das oben Gesagte zutrifft, benötige ich einen m2e-Konnektor (oder einen anderen als den aktuellen), der beim Auflösen der OSGi-Abhängigkeiten die im POM angegebenen p2-Repositorys überprüft und diese automatisch zur Zielplattform hinzufügt.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage