OSGi Require-Capability и Tycho

Я создал плагин eclipse, который требует определенных возможностей в своем манифесте:

Require-Capability: osgi.service;filter:="(osgi.service=my.client.SessionService)"

Моя целевая платформа содержит другой пакет, предоставляющий эту возможность. Когда я пытаюсь создать это с помощью Tycho, я получаю следующее исключение:

[ERROR] Internal error: java.lang.RuntimeException: org.osgi.framework.BundleException: Bundle my.client.rxp cannot be resolved
[ERROR] Resolution errors:
[ERROR] Bundle my.client.rxp - Missing Constraint: Require-Capability: osgi.service; filter="(osgi.service=my.client.SessionService)"

Кажется, что Tycho не справляется с возможностями OSGi. Все работает нормально, как только я добавляю пакет, который предоставляет возможность в качестве обязательного пакета, к моему плагину eclipse. Но это не имеет смысла, так как плагин eclipse не должен иметь никакой зависимости от другого пакета реализации. Как можно использовать возможности OSGi в сборке Tycho?


person sebplorenz    schedule 17.03.2014    source источник
comment
Возможно, вам также следует установить директиву effective:=active для вашего требования, чтобы она не мешала разрешению пакета самой OSGi Framework. Подобные сервисные зависимости на самом деле предназначены только как подсказки для Resolver, такого как p2 (если бы он их только поддерживал!) или в Bndtools (который их поддерживает).   -  person Neil Bartlett    schedule 17.03.2014
comment
Привет, Нил, я уже пробовал с Effective:=active. Если я добавлю его в манифест, то p2, похоже, проигнорирует весь оператор. Преобразователь платформы OSGi рассматривает только возможности без эффективной директивы или Effective:=resolve. Возможности с другими значениями для эффективной директивы могут быть рассмотрены внешним агентом. Ядро OSGi 5.0.0 спец. стр.33. Эта хорошая идея возможностей кажется довольно бесполезной в среде maven-tycho-p2 :(   -  person sebplorenz    schedule 18.03.2014
comment
Я знаю, что p2 не справляется с этим должным образом. Тем не менее, использование Effective:=active для такого рода требований является правильным. Итак, я думаю, вы хотите сказать, что среда maven-tycho-p2 кажется довольно бесполезной ;-)   -  person Neil Bartlett    schedule 31.03.2014
comment
Да, и это не единственная проблема, сводящая меня с ума при использовании maven-tycho-p2... но это уже другая история, в другой раз.   -  person sebplorenz    schedule 03.04.2014


Ответы (2)


Скорее всего, это вызвано ошибкой в ​​​​p2:

https://bugs.eclipse.org/bugs/show_bug.cgi?id=313553

который Tycho использует для разрешения зависимостей.

person jsievers    schedule 17.03.2014

Благодаря jsievers, который предоставил правильную запись об ошибке eclipse. Внутри записи об ошибке есть ссылка на статью о настройке метаданных p2. Короче говоря, для того, чтобы p2 правильно обрабатывал возможности, вы должны предоставить рекомендации по возможностям, написав файл рекомендаций p2 (p2.inf).

Мне пришлось сделать следующее, чтобы исправить разрешение возможностей, описанное в моем вопросе выше. В пакете, который предоставляет эту возможность, должен быть файл META-INF/p2.inf со следующим содержимым:

provides.0.namespace = osgi.serviceloader
provides.0.name = my.client.SessionService

В пакете, который требует эту возможность, должен быть файл META-INF/p2.inf со следующим содержимым:

requires.0.namespace = osgi.serviceloader
requires.0.name = my.client.SessionService

Гораздо больше вариантов советов по возможностям можно найти в статье.

person sebplorenz    schedule 26.03.2014