2013-05-17 4 views
1

У меня есть проблема, когда я строю войну с использованием Maven войны плагин и перекрывающий его, используя BND плагин, как описано в Adding OSGi metadata to existing projects without changing the packaging type. Этот проект определяет следующую зависимость:Как определить диапазон версий для пакета импорта?

<dependency> 
     <groupId>com.sun.jersey</groupId> 
     <artifactId>jersey-server</artifactId> 
     <version>1.12</version> 
    </dependency> 

При запуске сборки, он генерирует следующее запись в MANIFEST.MF

Import-Package: .., javax.ws.rs.core, .. 

Как только я изменить версию 1.13 или выше входа Импорт-пакет становится:

Import-Package: .., javax.ws.rs;version="[1.1,2)", .. 

Это становится настоящей проблемой для меня, потому что у меня есть javax.ws.rs.javax.ws.rs-api_2.0.0.m16. Который разрешит импорт для случая без версии, но перестает делать это, когда существует ограничение диапазона.

Итак, мой общий вопрос: как bnd определяет этот диапазон версий? Что-то изменилось между двумя второстепенными выпусками, чтобы заставить его перейти от ограничения версии к определенному диапазону, поэтому я думаю, что понимание того, как bnd делает это решение, поможет мне обнаружить, что это за проблема.

ответ

7

Bnd использует OSGi Semantic Versioning - пожалуйста, прочтите whitepaper (ссылка PDF).

Во-первых, bnd разрабатывает, какая версия пакета использовалась во время сборки. JSR311 API Jar, который у вас был на пути сборки, должен содержать оператор версии Export-Package, который является хорошим, и эта версия должна была быть 1.1. Таким образом, самая низкая версия этого пакета, которую может использовать ваш пакет, равна 1,1.

Semantic Versioning говорит, что сегмент Major (т.е. первый) увеличивается, указывая на изменение прерывания для всех пользователей. Поэтому ваш комплект НЕ будет совместим с версией 2. * пакета javax.ws.rs. Таким образом, bnd генерирует диапазон до, но не включая 2 ... i.e, [1.1,2).

Я не понимаю, почему это может вызвать у вас проблемы. Вы заявили, что хотите развернуть в свою очередь пакет, называемый javax.ws.rs.javax.ws.rs-api_2.0.0.m16, но это похоже на имя файла. Вы проверили, есть ли пакет javax.ws.rs внутри комплекта версии 2? Если он все еще версии 1. *, то вы можете использовать его ... если это версия 2. *, то это означает, что пакет содержит взломанные изменения, поэтому вы не должны его использовать. Наконец, если версия пакета равна 2. *, но это не очень изменчивое изменение, тогда кто бы ни создавал этот пакет, он не ошибся, и ему нужно вернуться и прочитать PDF, с которым я связан.

 Смежные вопросы

  • Нет связанных вопросов^_^