Статьи

Правила управления версиями MANIFEST.MF и feature.xml

Я навсегда забыл, каковы правила для объявлений зависимостей в MANIFEST.MF и feature.xml для плагинов и функций osgi. И поиск в Google часто приводит к разочарованию, а не к ответу. Итак, поскольку сегодня я действительно нашел краткий список правил, я решил опубликовать их здесь, с некоторыми незначительными правками, чтобы помочь прояснить.

Диапазоны версий плагинов OSGi

Зависимости от пакетов и пакетов имеют связанный диапазон версий, который указывается с использованием интервальной нотации: квадратная скобка «[» или «]» обозначает включающий конец диапазона, а круглая скобка «(» или «)» обозначает эксклюзивный конец из диапазона. Если один конец диапазона должен быть включен, а другой исключен, разрешается соединять круглую скобку с квадратной скобкой. Приведенные ниже примеры проясняют это.

Если используется один номер версии, когда требуется диапазон версий, это означает не одну версию, а диапазон, начиная с этой версии и включая все более поздние версии.

Есть четыре распространенных случая:

  • «Строгий» диапазон версий, такой как [1.2.3,1.2.3], который обозначает эту версию и только эту версию.
  • «Полуоткрытый» диапазон, такой как [1.2.3,2.0.0), который имеет включающий нижний предел и исключительный верхний предел, обозначая версию 1.2.3 и любую версию после этого, вплоть до, но не включая, версия 2.0.0.
  • «Неограниченный» диапазон версий, например 1.2.3, который обозначает версию 1.2.3 и все более поздние версии.
  • Нет диапазона версий, который обозначает любую версию, будет приемлемым. НЕ РЕКОМЕНДУЕТСЯ .

Полный текст приведенного выше фрагмента можно посмотреть здесь ( или здесь, в формате PDF ).

Пример:

1
Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.4.0,4.0.0)", org.eclipse.core.resources;bundle-version="[3.4.0,4.0.0)", org.eclipse.ui.ide;bundle-version="[3.4.0,4.0.0)", org.eclipse.ui.navigator;bundle-version="3.5.100", com.ibm.icu

Смотрите также:

С точки зрения правил манифеста функций (feature.xml), help.eclipse.org имеет довольно хорошую документацию, но самое важное, что нужно помнить — и что мне часто приходится искать — это как сформулировать правила соответствия для требуемых вышестоящих функций и плагины. Опыт показывает, что всегда лучше четко заявлять о вещах, поэтому нет необходимости в догадках ниже по течению, и любой, кто читает ваш манифест, точно знает, какие версии требуются или совместимы с вашей функцией. Кроме того, хотя вы можете использовать PDE UI для сборки, кто-то другой может использовать Tycho и Maven, и каждый инструмент может интерпретировать пропущенные метаданные по-своему.

Если есть сомнения, изложите это.

Допустимые значения и обработка следующие:

  • если атрибут версии не указан, атрибут соответствия (если указан) игнорируется.
  • Совершенно — зависимая версия плагина должна точно соответствовать указанной версии. Если «patch» — «true», предполагается «perfect» и другие значения не могут быть установлены. [1.2.3,1.2.3]
  • эквивалентно- зависимая версия плагина должна быть как минимум в указанной версии или на более высоком уровне обслуживания (уровни основной и вспомогательной версий должны совпадать с указанной версией). [1.2.3,1.3)
  • совместимая — зависимая версия плагина должна быть как минимум в указанной версии, либо на более высоком уровне обслуживания или второстепенном уровне (основной уровень версии должен соответствовать указанной версии). [1.2.3,2.0)
  • moreOrEqual — зависимая версия плагина должна быть как минимум в указанной версии или на более высоком уровне обслуживания, на младшем или главном уровне. 1.2.3

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

Пример:

01
02
03
04
05
06
07
08
09
10
11
<requires>
  <import feature="org.eclipse.m2e.feature" version="1.0.0" match="compatible"/>
  <import feature="org.maven.ide.eclipse.wtp.feature" version="0.13.0" match="greaterOrEqual"/>
  <plugin id="ch.qos.logback.classic" version="0.9.27.v20110224-1110" match="greaterOrEqual"/>
  <plugin id="ch.qos.logback.core" version="0.9.27.v20110224-1110" match="greaterOrEqual"/>
  <plugin id="ch.qos.logback.slf4j" version="0.9.27.v20110224-1110" match="greaterOrEqual"/>
  <plugin id="org.slf4j.api" version="1.6.1.v20100831-0715" match="compatible"/>
  <plugin id="com.ning.async-http-client" version="1.6.3.201106061504" match="equivalent"/>
  <plugin id="org.jboss.netty" version="3.2.4.Final-201106061504" match="perfect"/>
  <plugin id="org.hamcrest.core" version="1.1.0.v20090501071000" match="equivalent"/>
</requires>

Ссылка: правила управления версиями MANIFEST.MF и feature.xml от нашего партнера по JCG Ника Болдта в блоге DivByZero .