In Equinox Ist es möglich, einen OSGi-Bundle zu markieren, wie aus seiner enthält Funktion des p2.inf gestartet?

StackOverflow https://stackoverflow.com/questions/3077282

  •  28-09-2019
  •  | 
  •  

Frage

Ich habe eine Eclipse-Funktion, die mehrere Bündel enthält. Ich möchte eine jener Bündel p2 Marke sagen, wie gestartet, wenn die Funktion installiert ist. Dies ist möglich, indem das Bündel eigene META-INF / p2.inf wie so,

instructions.configure = markStarted(started: true)

, aber ich mag diese eher auf der Funktionsebene tun, als die Bündel-Ebene (das Bündel in Frage ist Dritter, und ich würde es nicht in irgendeiner Weise zu verändern vorziehen, wenn möglich).

Einige Untersuchungen haben mich dazu gebracht, an dieses Dokument was darauf schließen lässt, dass es möglich sein sollte, verschieben Sie die configure Anweisungen des p2.inf des enthaltenden Funktion. Ich habe versucht, all die offensichtlichen Dinge wie:

units.0.id = <bundle symbolic name>
units.0.instructions.configure = \
  org.eclipse.equinox.p2.touchpoint.eclipse.markStarted(started: true)

aber bisher keine der Permutationen Ich habe versucht hat keine Wirkung. Wie in nichts passiert, wird das Bündel nicht gestartet markiert und keine Fehler gemeldet werden)

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

War es hilfreich?

Lösung

Die "Einheiten. #." p2.inf Einträge erstellen Sie eine neue installierbare Einheit , sie nicht ändern andere bestehende IUs.

Sie haben im Grunde eine ganze installierbare Einheit Fragment erstellen. Das Fragment hat die entsprechenden Anweisungen und Attachés zu Ihrem Bundle IU. Dann müssen Sie eine Anforderung aus dem Merkmal dieser neuen IU hinzuzufügen.

PDE / Bauen macht dies automatisch, wenn Produkte zu bauen. Sie können die erzeugten p2.inf sehen durch einen wenig rcp Füllgutansatz zu schaffen, die ein Startniveau für Ihr Bündel hat.
Der erzeugte p2.inf in einem Füllgutansatz wird buildDirectory/features/org.eclipse.pde.build.container.feature/product/p2.inf

Hier ist ein Beispiel, das ich von einem Build geändert, die das Startniveau für org.eclipse.equinox.common setzt. Die $version$ wird durch die Version aus dem Feature ersetzt bekommen, dass die p2.inf gehört. Beachten Sie die „hostRequirements“, die das Bündel spezifiziert sind wir ein Fragment.

#create a requirement on the IU fragment we are creating
requires.2.namespace=org.eclipse.equinox.p2.iu
requires.2.name=configure.org.eclipse.equinox.common
requires.2.range=[$version$,$version$]
requires.2.greedy=true

#create a IU frament named configure.org.eclipse.equinox.common
units.0.id=configure.org.eclipse.equinox.common
units.0.version=$version$
units.0.provides.1.namespace=org.eclipse.equinox.p2.iu
units.0.provides.1.name=configure.org.eclipse.equinox.common
units.0.provides.1.version=$version$
units.0.instructions.install=installBundle(bundle:${artifact});
units.0.instructions.uninstall=uninstallBundle(bundle:${artifact});
units.0.instructions.unconfigure=setStartLevel(startLevel:-1);markStarted(started:false);
units.0.instructions.configure=setStartLevel(startLevel:2);markStarted(started:true);
units.0.hostRequirements.1.namespace=osgi.bundle
units.0.hostRequirements.1.name=org.eclipse.equinox.common
units.0.hostRequirements.1.range=[3.6.0.v20100503,3.6.0.v20100503]
units.0.hostRequirements.1.greedy=false
units.0.hostRequirements.2.namespace=org.eclipse.equinox.p2.eclipse.type
units.0.hostRequirements.2.name=bundle
units.0.hostRequirements.2.range=[1.0.0,2.0.0)
units.0.hostRequirements.2.greedy=false
units.0.requires.1.namespace=osgi.bundle
units.0.requires.1.name=org.eclipse.equinox.common
units.0.requires.1.range=[3.6.0.v20100503,3.6.0.v20100503]
units.0.requires.1.greedy=false

Antworten auf die Fragen:

  1. 0 ist, 1 ist, 2 der

    Diese Zahlen etwas willkürlich, sie dienen nur einen Satz von Eigenschaften zu trennen (requires oder units oder was auch immer) von einem anderen. Die requires hier ein ‚2‘ einfach verwendet, weil ich es von einem großen p2.inf kopiert, die durch pde.build erzeugt wurden und vergessen, es zu ändern, wie ich den units.0 tat.

  2. Ist das alles nötig?

    Ja. Der zweite hostRequirements vom Typ = Bündel benötigt. In Helios, mit Ausnahme von Fragmenten Übersetzung kann nur ein Fragment zu einer IU befestigt werden. Im Allgemeinen wird ein Standard-IE zur Verfügung, das setzt die Standard-Startstufe für all OSGi-Bundles. Damit das unsere eigene Fragment über den Standard eines ausgewählt werden kann, muss es eine höhere „Spezifität“ haben, die die Zahl der zufriedenen Host Anforderungen ist.

    "install"

    units.0.instructions.install = installBundle (Bundle: $ {Artefakt}); units.0.instructions.uninstall = uninstallBundle (Bundle: $ {Artefakt});

    Die instructions.install und instructions.uninstall beziehen sich auf Phasen des p2-Prozess. Die installBundle und uninstallBundle siehe Installation / Deinstallation im OSGi Sinne. Ihr Bündel muss in das OSGi-System installiert werden, bevor Sie etwas anderes tun kann. Diese im Grunde invovles Zugabe zu dem config.ini oder org.eclipse.equinox.simpleconfigurator / bundles.info Dateien.

    Die meisten werden p2 installiert bereits eine Standardkonfiguration IU enthalten, die die Standard-Startstufe (4) zum Bündeln installiert und eingestellt. Derzeit wird jedoch nur eine Konfiguration Fragment kann zu jedem Bündel angewandt werden, so dass, wenn Sie Ihre eigenen wie folgt hinzufügen der Standard nicht mehr zu Ihrem Bundle angewandt.

  3. hostRequirements. Die installierbaren Fragmente Einheit Seite beschreibt genau das, was ein Fragment ohne Bezug ist, wie man erstellen. Es wird biefly erwähnt auf der Customizing Metadaten Seite, aber nicht erklärt.

    Dokumentation gibt es ein paar Sachen im Wiki unter p2 Kategorie . die Seite, auf der Berührungspunkt Anweisungen könnte interessant sein. Es ist etwas Hilfe auf help.eclipse.org , aber im allgemeinen, ich denke, das ist ein bisschen weiter fortgeschritten ist, was Dokumentation gibt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top