Обрабатывается ли импорт пакетов org.osgi.* по-разному?

В OSGi процесс разрешения определенных зависимостей, то есть импорта и экспорта пакетов, довольно строг при использовании номеров версий и диапазонов версий. Если для некоторого пакета импорта версии 1.2.3 не найден соответствующий экспорт с диапазоном, содержащим 1.2.3, пакет не может быть разрешен или запущен. Это хорошо.

Однако это не относится к основному пакету org.osgi.framework. Текущие версии Equinox (3.8.0) и Apache Felix (4.0.3) определяют org.osgi.framework,version=1.7.0 как один из экспортируемых пакетов. Но пакет, требующий конкретной более низкой версии этого пакета, например. Import-Package: org.osgi.framework;version=1.3, все еще разрешается это для этой более новой версии. Я ожидаю, что пакет не будет решен.

Как можно объяснить такое поведение? Является ли это неправильным поведением реализаций OSGi? Я пропустил исключение при разрешении основных пакетов OSGi? Или здесь Караф мешает (я тестировал это с помощью Apache Karaf, см. ниже)

Я знаю, что я бы предпочел не объявлять версию явно и что версия привела бы к совершенно разрешимому диапазону. Однако есть неподконтрольные мне пакеты, определяющие такой импорт (а именно: iPOJO, см. ниже).


Некоторые детали настройки: я тестировал это в Karaf 2.3.2 и 2.3.3 с включенными Equinox или Felix соответственно. Вы можете найти демонстрационный пакет, который я использовал для тестов, на github, который может быть собранным как есть и покажет сбой при развертывании в новом контейнере Karaf. Причина, по которой я это обнаружил, заключается в том, что ядро iPOJO bundle определяет такие явные версии, а не диапазоны. Я добавил это в дескриптор функции Karaf и попытался проверить целостность экспорта/импорта функции с помощью Karaf Features Maven Plugin, который не работает.


person benjamin    schedule 30.09.2013    source источник


Ответы (2)


В OSGi импорт версии=1.3 эквивалентен версии="[1.3,∞)". См. раздел 3.2.6 «Диапазоны версий». Это по историческим причинам.

Вы всегда должны использовать полные диапазоны версий в своих операторах пакета импорта.

person BJ Hargrave    schedule 30.09.2013

Нет, импорт пакетов в OSGi НЕ обрабатывается, повторяю НЕ, по-другому. OSGi никогда не делает исключений для собственных сервисов или кода, он полностью симметричен.

Как заявил BJ в своем ответе, импорт для версии X на самом деле является импортом для X и выше.

person Peter Kriens    schedule 01.10.2013