Erstellen eines p2-Repositorys durch Auflösen von Tycho-Features aus einem Maven-Repository

Ich versuche, ein p2-Repository aus Tycho-Feature-Artefakten zu erstellen, die in einem Remote-Maven-Repository bereitgestellt werden, ohne die Artefakte zuerst im lokalen Maven-Repository installieren zu müssen (wie inTycho kann den Verweis vom Produkt auf das Eclipse-Feature von einem anderen Reaktorbau nicht auflösen.) und ohne dass alle Features und das Repository zusammen in einem einzigen Reaktorbau erstellt werden müssen.

Hintergrun

Ich habe ein Tycho-Projekt mit mehreren Modulen, das mehrere Eclipse-Plugins und -Funktionen erstellt.

Damit ich jedes Modul separat erstellen kann - und OSGI-Artefakte in unserem Nexus Maven-Repository referenzieren kann - habe ich @ aktivier<pomDependencies>consider</pomDependencies> auf meiner Zielplattform und fügte Maven-Abhängigkeiten zwischen den Modulen oder den Repository-Artefakten wie gewohnt mit @ hinz<dependency/> elements.

Dies funktioniert gut - Ich kann die Features erstellen oder die Plugin-Tests ausführen, ohne dass sich die abhängigen Plugins entweder in meinem lokalen Maven-Repository oder in demselben Reaktor-Build befinden. Zum Beispiel, wenn ichmvn test Bei einem Plugin-Testprojekt werden die relevanten Abhängigkeiten von Nexus heruntergeladen und Tycho löst dasImport-Packages in meinem Manifest dagegen, baue alles und führe die Tests aus. So weit, ist es gut

Ich möchte aus diesen Funktionen ein p2-Repository generieren, damit ich sie in Eclipse von einer Aktualisierungssite aus installieren kann. Die angekündigte Methode hierfür ist eclipse-repository Verpackungsart. Aber hier fällt der Plan zusammen - Tycho scheint nicht in der Lage zu sein, Feature-Abhängigkeiten beim Erstellen von Repositorys auf die gleiche Weise aufzulösen wie Plug-in-Abhängigkeiten beim Erstellen von Features. Alle Versuche ergeben:

[ERROR] Cannot resolve project dependencies:
[ERROR]   Software being installed: my.eclipse.repository raw:0.0.1.'SNAPSHOT'/format(n[.n=0;[.n=0;[-S]]]):0.0.1-SNAPSHOT
[ERROR]   Missing requirement: my.eclipse.repository raw:0.0.1.'SNAPSHOT'/format(n[.n=0;[.n=0;[-S]]]):0.0.1-SNAPSHOT requires 'my.prj.eclipse.project.feature.feature.group 0.0.0' but it could not be found

Es gibt zwei Möglichkeiten, wie ich das p2-Repository erfolgreich erstellt habe:

ls Teil desselben Reaktoraufba. Wenn ich das @ maceclipse-repository ein Modul innerhalb des Tycho-Multi-Modul-Projekts, und erstellen Sie das gesamte Projekt auf einmal mit z.mvn verify, die Funktionen werden gut aufgelöst. Aber ich möchte das nicht tun. Ich würde es vorziehen, Module einzeln zu bauen. Dies bedeutet, dass unser CI einen Indikator für jedes Modul haben kann und wir sofort sehen können, in welchen Modulen Tests fehlgeschlagen sind. Es gibt uns die Möglichkeit, Builds zu parallelisieren. und wir vermeiden es, ständig auf Modulen aufzubauen, die sich nicht geändert haben. Es wäre eine Schande, einen monolithischen Maven-Build verwenden zu müssen.Wenn ich das Tycho-Projekt in meinem lokalen Maven-Repository installiere, indem Sie @ ausführmvn install auf die Abhängigkeit. Aber ich möchte dies auch nicht tun, da dies bedeuten würde, dass der Build von Natur aus nicht reproduzierbar ist, da er vom Status des lokalen Repositorys abhängt. Unser CI ist derzeit so eingerichtet, dass es ein Maven-Repository pro Job verwaltet und zu Beginn der Ausführung vollständig löscht, um uns vor dieser potenziellen Unordnung zu schützen.

Also meine Frage ist: gibt es einen dritten Weg? Kann ich das Tycho-Plugin, das für das Erstellen von @ zuständig ist, auf irgendeine Weise herunterladeeclipse-repository Pakettypen zum Herunterladen von Funktionen aus einem Remote-Maven-Repository? Oder auf irgendeine andere Weise kann ich das p2-Repository aus Plugins erstellen, die einzeln erstellt und im Maven-Repository bereitgestellt wurden?

u den Dingen, die ich ausprobiert habe, gehöre

spezifizieren der Abhängigkeiten der Maven-Funktionen als beidejar undeclipse-feature

Explizit Hinzufügen der Funktionen zur Zielplattform, z. B.

... <artifactId>target-platform-configuration</artifactId> <version>${tycho.version}</version> <configuration> <dependency-resolution> <extraRequirements> <requirement> <type>eclipse-feature</type> <id>my.prj.eclipse.project.feature</id> <versionRange>0.0.0</versionRange> </requirement> ...

Das am nächsten Ich habe festgestellt, dass eine anständige Lösung darin besteht, ein Tycho-Projekt mit mehreren Modulen zu haben, das nur das Repository und die Funktionen enthält.

feature-project
 |- feature1    (eclipse-feature)
 |- feature2    (eclipse-feature)
 |- repository  (eclipse-repository)

Building this works - Alle zum POM der obersten Ebene hinzugefügten Plug-ins werden von Nexus heruntergeladen, sind für jede Funktion verfügbar und im generierten Repository enthalten.

Dies ist jedoch alles andere als ideal, da ich meine Funktionen nicht mehr logisch neben meinen Plugins speichern kann. Sie müssen sich in separaten Projekthierarchien befinden. Versuch, die Features und das Repository separat zu erstellen, wie mitmvn clean verify -pl :feature1,feature2,repository, scheitert vermutlich anBug 380152.

ibt es einen besseren Weg? Jede Hilfe wäre dankbar.

Danke vielmal

(Nebenbei bemerkt: Erstellen des Repositorys mitmvn clean verify -Dtycho.localArtifacts=ignore werdengelinge Wenn die Features im lokalen Maven-Repository vorhanden sind und die Warnung, dass Artefakte vom lokalen Repository behoben werden, nicht angezeigt wird ... ist dies ein Fehler?)

Antworten auf die Frage(2)

Ihre Antwort auf die Frage