Как я могу импортировать пакет любой версии выше или равной 1.0.0 в OSGi?

Я пытаюсь импортировать пакет OSGi, и допустима любая версия больше или равная 1.0.0. По сути, я просто хочу убедиться, что не получу никакой версии 0.x, но кроме них любая версия приемлема. Как я могу разрешить все версии от 1.0.0 (включительно) до бесконечности (неограниченно).

Я пробовал следующее:

com.mypackage.example;version="[1.0.0,)"
com.mypackage.example;version="[1,)"
com.mypackage.example;version="[1.0.0]"
com.mypackage.example;version="[1.0.0)"

Я также рассмотрел этот вопрос: Действительные диапазоны версий OSGI. Но, похоже, он ссылается на Java API, а не на заголовок MANIFEST.MF Import-Package.


person stiemannkj1    schedule 25.01.2018    source источник
comment
Почему вы задаете серию вопросов OSGi, а затем сразу же сами на них отвечаете?   -  person Neil Bartlett    schedule 26.01.2018
comment
@NeilBartlett, просто пытаюсь помочь другим с вопросами, на которые у меня ушло много времени, или они неинтуитивны и плохо документированы. Это поощряется SO.   -  person stiemannkj1    schedule 26.01.2018
comment
@NeilBartlett, это также помогает мне, поскольку, когда у меня будет точно такой же вопрос в будущем, я смогу его найти в Google.   -  person stiemannkj1    schedule 26.01.2018


Ответы (2)


Уже есть ответ, который объясняет, как это можно сделать, но я считаю своим долгом сказать, что никто никогда не должен этого делать.

Наложение верхних границ на импорт пакетов — важная часть эволюции API и семантического управления версиями. Если вы утверждаете, что работаете со всеми будущими версиями, то в конечном итоге вас сломают изменения API.

Перемещение версии Export-Package с 1.x на 2.0 означает, что было внесено критическое изменение. Методы, на которые вы полагаетесь, могут больше не существовать или вести себя по-другому. Просто нельзя с уверенностью сказать, что вы будете совместимы со всеми будущими версиями API.

Правильный диапазон версий для использования при импорте версии 1.0 API: "[1,2)", если вы являетесь потребителем, или "[1,1.1)", если вы являетесь поставщиком.

Потребители — это «типичные пользователи» API, например, если я пишу сервлет, я являюсь «потребителем» API сервлета. Провайдеры — это люди, которые обеспечивают поддержку API (например, TomCat). Обратите внимание, что это не то же самое, что сказать, что реализация интерфейса делает вас поставщиком — использование API сервлета требует от вас реализации интерфейса сервлета.

person Tim Ward    schedule 25.01.2018

Чтобы указать диапазон версий [1.0.0,infinity) для пакета, просто включите номер версии в кавычки:

com.mypackage.example;version="1.0.0"

Это позволит использовать любую версию больше или равную 1.0.0.

Поскольку указание одного номера версии подразумевает неограниченный/бесконечный диапазон, вам может быть интересно, как вы будете импортировать конкретную версию пакета (и никакие другие версии). Вы можете сделать это, указав диапазон от версии до самой себя:

com.mypackage.example;version="[1.3.1,1.3.1]"

Вся эта информация взята из документации Eclipse по адресу Концепции OSGi (в частности, раздел Управление версиями).

person stiemannkj1    schedule 25.01.2018
comment
Отсутствует ссылка на главу спецификации, в которой это определяется. Ссылка на мертвый проект Virgo не совсем авторитетна. - person Neil Bartlett; 26.01.2018