В Equinox можно ли пометить пакет OSGi как запущенный из p2.inf содержащей его функции?

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

  •  28-09-2019
  •  | 
  •  

Вопрос

У меня есть функция Eclipse, которая включает в себя несколько пакетов.Я хочу сказать p2, чтобы он пометил один из этих пакетов как запущенный при установке функции.Это возможно с использованием собственного META-INF / p2.inf пакета, например,

instructions.configure = markStarted(started: true)

но я хочу сделать это на уровне функций, а не на уровне пакетов (рассматриваемый пакет является сторонним, и я бы предпочел никоим образом не изменять его, если это возможно).

Некоторые исследования привели меня к этот документ это предполагает, что должна быть возможность переместить инструкции по настройке в p2.inf содержащей функции.Я перепробовал все очевидные вещи, такие как,

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

но пока ни одна из перестановок, которые я пробовал, не дала никакого эффекта:поскольку ничего не происходит, пакет не помечен как запущенный и об ошибках не сообщается).

Любые указания были бы очень кстати.Это связано с затмением Галилея в день равноденствия (3.5.2)...ответы, касающиеся Гелиоса, также были бы очень полезны.

Это было полезно?

Решение

Записи "units.#." p2.inf создают новый Устанавливаемый Блок, они не изменяют другие существующие IU.

По сути, вам нужно создать целую Устанавливаемый фрагмент блока.Фрагмент содержит соответствующие инструкции и прикрепляется к IU вашего пакета.Затем вам нужно добавить требование из вашей функции в этот новый IU.

PDE / Build делает это автоматически при создании продуктов.Вы могли бы увидеть сгенерированный p2.inf, создав небольшую сборку продукта rcp, которая имеет начальный уровень для вашего пакета.
Сгенерированный p2.inf в сборке продукта будет иметь вид buildDirectory/features/org.eclipse.pde.build.container.feature/product/p2.inf

Вот пример, который я изменил из сборки, которая устанавливает начальный уровень для org.eclipse.equinox.common.Тот Самый $version$ будет заменена версией из функции, к которой принадлежит p2.inf.Обратите внимание на "hostRequirements", который указывает пакет, фрагментом которого мы являемся.

#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

Ответы на вопросы:

  1. 0-е, 1-е, 2-е

    Эти числа несколько произвольны, они служат только для разделения одного набора свойств (requires или units или что бы то ни было) от другого.Тот Самый requires здесь использовано '2' просто потому, что я скопировал его из большого файла p2.inf, который был сгенерирован pde.build, и забыл изменить его, как я сделал с units.0.

  2. Необходимо ли все это?

    ДА.Второй hostRequirements по типу=необходим пакет.В Helios, за исключением фрагментов перевода, к IU может быть присоединен только один фрагмент.Как правило, доступен IU по умолчанию, который устанавливает начальный уровень по умолчанию для всех пакетов osgi.Для того чтобы наш пользовательский фрагмент был выбран вместо фрагмента по умолчанию, он должен обладать более высокой "специфичностью", то есть количеством удовлетворенных требований хоста.

    Для "установки"

    единицы измерения.0.инструкции.install=installBundle(пакет:${артефакт});единицы измерения.0.инструкции.удалить=uninstallBundle(пакет:${артефакт});

    Тот Самый instructions.install и instructions.uninstall обратитесь к этапам процесса p2.Тот Самый installBundle и uninstallBundle обратитесь к разделу установка / деинсталляция в смысле OSGi.Ваш пакет должен быть установлен в систему OSGi, прежде чем вы сможете сделать что-либо еще.По сути, это предполагает добавление его в файлы config.ini или org.eclipse.equinox.simpleconfigurator / bundles.info.

    Большинство установок p2 уже будут содержать IU конфигурации по умолчанию, который установит и установит начальный уровень по умолчанию (4) для пакетов.Однако в настоящее время к каждому пакету может быть применен только один фрагмент конфигурации, поэтому, когда вы добавляете свой собственный, подобный этому, значение по умолчанию больше не применяется к вашему пакету.

  3. Требования к хостингу.Страница фрагментов устанавливаемого модуля просто описывает, что такое фрагмент, без каких-либо ссылок на то, как его создать.Это часто упоминается на Настройка метаданных страница, но не объяснена.

    Документация, в вики есть куча материала в разделе категория p2.страница на сайте инструкции по установке точки касания это может быть интересно.Есть некоторая помощь по help.eclipse.org, но в целом, я думаю, что это немного более продвинуто, чем то, для чего существует документация.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top