In Equinox Ist es möglich, ein OSGi-Paket so zu markieren, wie es von der Funktion p2.inf seiner enthaltenden Funktion gestartet wurde?

8

Ich habe eine Eclipse-Funktion, die mehrere Bündel enthält. Ich möchte p2 anweisen, eines dieser Bundles so zu markieren, wie es bei der Installation des Features gestartet wurde. Dies ist möglich, indem man die Bündel META-INF / p2.inf wie folgt verwendet,

%Vor%

aber ich möchte das auf der Feature-Ebene tun und nicht auf der Bundle-Ebene (das fragliche Paket ist ein Drittanbieter, und ich würde es vorziehen, es in keiner Weise zu modifizieren, wenn möglich).

>

Einige Recherchen haben mich dazu gebracht, dieses Dokument zu veröffentlichen, das vorschlägt, dass es möglich sein sollte, die Konfigurationsanweisungen zu verschieben das enthaltene Feature ist p2.inf. Ich habe alle offensichtlichen Dinge wie,

ausprobiert %Vor%

aber bis jetzt hat keine der Permutationen, die ich versucht habe, irgendeinen Effekt: da nichts passiert, wird das Bündel nicht als gestartet markiert und es werden keine Fehler gemeldet.)

Alle Hinweise wären sehr willkommen. Das ist mit Eclipse Equinox Galileo (3.5.2) ... Antworten auf Helios wäre auch sehr nützlich.

    
Miles Sabin 19.06.2010, 21:21
quelle

1 Antwort

9

Die "Einheiten. #." p2.inf-Einträge erstellen eine neue installierbare Einheit , sie ändern keine anderen vorhandenen IUs.

Sie müssen im Grunde ein komplettes Installable Unit-Fragment erstellen. Das Fragment enthält die relevanten Anweisungen und hängt an die IU Ihres Bundles an. Dann müssen Sie dieser neuen IE eine Anforderung aus Ihrer Funktion hinzufügen.

PDE / Build macht dies automatisch beim Erstellen von Produkten. Sie könnten die generierte p2.inf sehen, indem Sie ein kleines rcp-Produkt erstellen, das eine Start-Ebene für Ihr Paket hat.
Die generierte p2.inf in einem Produkt-Build wird buildDirectory/features/org.eclipse.pde.build.container.feature/product/p2.inf

sein

Hier ist ein Beispiel, das ich von einem Build geändert habe, der den Startlevel für org.eclipse.equinox.common festlegt. Das $version$ wird durch die Version des Features ersetzt, zu dem p2.inf gehört. Beachten Sie die "hostRequirements", die das Paket angeben, aus dem wir ein Fragment sind.

%Vor%

Antworten auf Fragen:

  1. 0, 1, 2

    Diese Zahlen sind etwas willkürlich, sie dienen nur dazu, einen Satz von Eigenschaften ( requires oder units oder was auch immer) von einem anderen zu trennen. Die requires haben hier eine '2' verwendet, weil ich sie einfach von einer großen p2.inf kopiert habe, die von pde.build generiert wurde, und vergessen habe sie zu ändern, so wie ich die units.0 gemacht habe.

  2. Ist das alles notwendig?

    Ja. Der zweite hostRequirements im Typ = Bündel wird benötigt. In Helios kann mit Ausnahme von Übersetzungsfragmenten nur ein Fragment an eine IE angehängt werden. Im Allgemeinen ist eine Standard-IE verfügbar, die die Standardstartstufe für alle OSGI-Bundles festlegt. Damit unser benutzerdefiniertes Fragment gegenüber dem Standardfragment ausgewählt wird, muss es eine höhere "Spezifität" haben, die die Anzahl der erfüllten Host-Anforderungen darstellt.

    Für "installieren"

    units.0.instructions.install = installBundle (Paket: $ {artifact}); units.0.instructions.uninstall = uninstallBundle (Bündel: $ {artifact});

    Die instructions.install und instructions.uninstall beziehen sich auf Phasen des p2-Prozesses. Die installBundle und uninstallBundle beziehen sich auf die Installation / Deinstallation im OSGi Sinn. Ihr Paket muss in das OSGi-System installiert werden, bevor Sie etwas anderes tun können. Dies wird im Wesentlichen durch Hinzufügen zu den Dateien config.ini oder org.eclipse.equinox.simpleconfigurator / bundles.info ersetzt.

    Die meisten p2-Installationen enthalten bereits eine Standardkonfigurations-IE, die die Standardstartstufe (4) für Bundles installiert und festlegt. Derzeit kann jedoch nur ein Konfigurationsfragment auf jedes Paket angewendet werden. Wenn Sie also Ihr eigenes hinzufügen, wird der Standardwert nicht mehr auf Ihr Paket angewendet.

  3. hostRequirements. Die installierbare Unit-Fragment-Seite beschreibt nur, was ein Fragment ist, ohne Bezug darauf, wie ein Fragment erstellt wird. Es wird bereits auf der Seite Metadaten anpassen beschrieben, aber nicht erklärt.

    Dokumentation, es gibt eine Menge Zeug im Wiki unter der Kategorie p2 . Die Seite auf den Touchpoint-Anweisungen könnte interessant sein. Es gibt Hilfe zu help.eclipse. org , aber im Allgemeinen denke ich, dass das etwas fortgeschrittener ist als das, wofür es Dokumentation gibt.

Andrew Niefer 21.06.2010, 20:57
quelle

Tags und Links