Заголовки манифеста комплекта OSGi

Версия 3.1 - Дата последнего исправления - 20 июня 2005 г.

META-INF/MANIFEST.MF может содержать описание комплекта. Спецификация среды OSGi R4 определяет набор заголовков манифеста, таких как Export-Package и Bundle-Classpath, которые разработчики комплектов применяют для поставки описательной информации о комплекте. Среда Eclipse OSGi реализует полную спецификацию среды OSGi R4 и все службы Core Framework. В состав Core Framework OSGi R4 входят следующие службы:

В спецификации OSGi R4 определено несколько необязательных служб. Необязательные службы не включены в реализацию среды Eclipse OSGi. Информация о заголовках манифеста OSGi R4 и службах приведена в разделе Спецификация OSGi.

Заголовки манифеста комплектов Eclipse

Среда Eclipse OSGi поддерживает некоторые дополнительные заголовки и директивы манифеста комплектов. Применяя дополнительные заголовки и директивы, разработчик комплектов может воспользоваться преимуществами дополнительных комплектов среды Eclipse OSGi, которые не указаны в качестве компонентов стандартной среды OSGi R4.

Дополнительные директивы Export-Package

Среда Eclipse OSGi поддерживает дополнительные директивы для заголовка Export-Package. Эти директивы указывают правила ограничения доступа к экспортированному пакету. Информация о настройке среды Eclipse OSGi, а также о применении правил ограничения доступа во время работы приведена в разделеosgi.resolverMode.

Директива x-internal

Директива x-internal в заголовке Export-Package указывает, является ли пакет внутренним. Среда разработки модулей запретит другим комплектам использовать внутренний пакет. Если директива x-internal не указана, то применяется значение по умолчанию 'false'. Директива x-internal имеет следующий синтаксис:

x-internal ::= ( 'true' | 'false' )

Ниже приведен пример директивы x-internal:

Export-Package: org.eclipse.foo.internal; x-internal:=true

Директива x-friends

Директива x-friends в заголовке Export-Package указывает список комплектов, которым разрешен доступ к пакету. Среда разработки модулей запретит другим комплектам использовать этот пакет. Директива x-friends имеет следующий синтаксис:

x-friends ::= '"' ( целевой-комплект ) ( ',' целевой-комплект ) * '"'
целевой-комплект ::= символьное имя комплекта

Ниже приведен пример директивы x-friends:

Export-Package: org.eclipse.foo.formyfriends; x-friends:="org.eclipse.foo.friend1, org.eclipse.foo.friend2"

В примере указано, что только комплектам org.eclipse.foo.friend1 и org.eclipse.foo.friend2 будет разрешено использовать пакет org.eclipse.foo.formyfriends. Пакет с директивой x-internal имеет приоритет перед директивой x-friends. Если для директивы x-internal указано значение 'true', то среда разработки модулей запретит всем комплектам использование даже тех пакетов, которые перечислены в директиве x-friends.

Заголовок Eclipse-LazyStart

Заголовок Eclipse-LazyStart применяется в случае, если необходимо запустить комплект до того, как из него будет вызван первый класс или ресурс. Эта функция позволяет Eclipse настроить отложенный запуск комплектов для их первой активации. С помощью этой модели Eclipse может запускаться с минимально возможным количеством активных комплектов. Заголовок Eclipse-LazyStart имеет следующий синтаксис:

Eclipse-LazyStart ::= ( 'true' | 'false' ) ( ';' 'exceptions' '=' '"' exceptions-list '"' ) ?
список-исключений ::= список пакетов, разделенных запятой ','

Атрибут 'exceptions' указывает список пакетов, которые не должны вызывать активацию комплекта при загрузке из них классов или ресурсов. Если заголовок Eclipse-LazyStart не указан в манифесте модуля, то по умолчанию применяется значение 'false'. Ниже приведен пример заголовка Eclipse-LazyStart:

Eclipse-LazyStart: true; exceptions="org.eclipse.foo1, org.eclipse.foo2"

В примере указано, что этот комплект должен активироваться для любых загруженных из него классов и ресурсов, кроме классов и ресурсов в пакетах 'org.eclipse.foo1' и 'org.eclipse.foo2'.

Для версии Eclipse 3.2 заголовок Eclipse-AutoStart устарел. Вместо него следует указывать заголовок Eclipse-LazyStart.

Заголовок Eclipse-PlatformFilter

Заголовок Eclipse-PlatformFilter указывает фильтр платформы для комплекта. Для того чтобы была разрешена обработка комплекта, фильтр платформы должен получить в запущенной платформе значение 'true'. Заголовок Eclipse-PlatformFilter имеет следующий синтаксис:

Eclipse-PlatformFilter ::= допустимая строка фильтра LDAP

Среда поддерживает фильтрацию по следующим системным свойствам:

Ниже приведен пример заголовка Eclipse-PlatformFilter:

Eclipse-PlatformFilter: (& (osgi.ws=win32) (osgi.os=win32) (osgi.arch=x86))

Этот пример указывает, что данный комплект будет обработан только в том случае, если платформа имеет свойства osgi.ws=win32, osgi.os=win32 и osgi.arch=x86. Другими словами, необходима платформа с архитектурой x86, применяющая операционную систему win32 и систему организации окон win32.

Заголовок Eclipse-BuddyPolicy

Заголовок Eclipse-BuddyPolicy указывает дружескую политику загрузки классов для комплекта. Заголовок Eclipse-BuddyPolicy имеет следующий синтаксис:

Eclipse-BuddyPolicy ::= ( имя-политики ) ( ',' имя-политики ) *
имя-политики ::= ( 'dependent' | 'global' | 'registered' |
                  'app' | 'ext' | 'boot' | 'parent' )

Ниже приведен пример заголовка Eclipse-BuddyPolicy:

Eclipse-BuddyPolicy: dependent

Заголовок Eclipse-RegisterBuddy

Заголовок Eclipse-RegisterBuddy указывает список комплектов, для которых данный комплект является зарегистрированным другом. Заголовок Eclipse-RegisterBuddy имеет следующий синтаксис:

Eclipse-RegisterBuddy ::= ( целевой-комплект ) ( ',' целевой-комплект ) *
целевой-комплект ::= символьное имя комплекта

Ниже приведен пример заголовка Eclipse-RegisterBuddy:

Eclipse-RegisterBuddy: org.eclipse.foo.bundle1, org.eclipse.foo.bundle2

Заголовок Eclipse-ExtensibleAPI

Заголовок Eclipse-ExtensibleAPI указывает, разрешает ли комплект хоста фрагментированным комплектам добавлять в хост дополнительные API. Этот заголовок применяется, если комплект хоста пытается разрешить фрагментам добавлять дополнительные пакеты в API хоста. Если заголовок не указан, по умолчанию задается значение 'false'. Заголовок Eclipse-ExtensibleAPI имеет следующий синтаксис:

Eclipse-ExtensibleAPI ::= ( 'true' | 'false' )

Ниже приведен пример заголовка Eclipse-ExtensibleAPI:

Eclipse-ExtensibleAPI: true

Заголовок Eclipse-GenericCapabilty

Заголовок Eclipse-GenericCapability применяется для определения базовых функций модуля. Базовые функции используются для описания функций комплекта, которые могут применяться другими комплектами системы (с помощью заголовка Eclipse-GenericRequire). Базовым функциям присвоено имя и тип. Тип функции определяется комплектом, предоставляющим эту функцию. Для функций можно также задать набор атрибутов карты связей для преобразований при определении заголовков Eclipse-GenericRequire. Атрибуты преобразования могут принадлежать к одному из следующих типов: [string | version | uri | long | double | set]. Тип set можно использовать для определения набора строк в качестве списка строк, разделенных запятой. Заголовок Eclipse-GenericCapability имеет следующий синтаксис:

  Eclipse-GenericCapability ::= capability ( ',' capability ) *
  capability                ::= typed-name ( ';' typed-name ) *
                                ( ';' typed-param ) *
  typed-name                ::= name ( ':' capability-type )
  typed-param               ::= typed-key '=' quouted-string
  typed-key                 ::= name ( ':'
                                [string | version | uri | long | double | set] )

Ниже приведен пример заголовка Eclipse-GenericCapabilty, с помощью которого можно задать комплект с реализацией org.acme.stuff.SomeService службы OSGi:

  Eclipse-GenericCapability:
   org.acme.stuff.SomeService:osgi.service;
   version:version="1.0.1"

Заголовок Eclipse-GenericRequire

Заголовок Eclipse-GenericRequire используется для определения требований к базовым функциям, которые предоставляет другой комплект (с помощью заголовка Eclipse-GenericCapability). Базовым функциям присвоено имя и тип. Тип функции определяется комплектом, предоставляющим эту функцию. В базовых требованиях можно указать критерий фильтра LDAP, который используется для фильтрации совпадающих базовых функций. Заголовок Eclipse-GenericRequire имеет следующий синтаксис:

  Eclipse-GenericRequire   ::= generic-require ( ',' generic-require ) *
  generic-require          ::= typed-name ( ';' typed-name ) *
                               ( ';' selection-filter '=' quoated-ldapFilter )
                               ( ';' optional '=' [true|false] )
                               ( ';' multiple '=' [true|false] )
  typed-name                ::= name ( ':' capability-type )

Ниже приведен пример заголовка Eclipse-GenericRequire, с помощью которого можно задать комплект, зависящий от реализации org.acme.stuff.SomeService службы OSGi:

  Eclipse-GenericRequire:
   org.acme.stuff.SomeService:osgi.service;
   selection-filter="(version>=1.0.1)"

Базовые псевдонимы

Опция osgi.genericAliases используется для преобразования существующих заголовков манифеста OSGi в заголовки Eclipse-GenericCapability и Eclipse-GenericRequire. Пример заголовков манифеста:

  Export-Service: org.acme.stuff.SomeService
  Import-Service: org.acme.stuff.SomeService

Эти заголовки можно преобразовать в заголовки Eclipse-GenericCapability и Eclipse-GenericRequire с помощью свойства

  osgi.genericAliases=Export-Service:Import-Service:osgi.service

Они будут переведены в следующие базовые заголовки:

  Eclipse-GenericRequire: org.acme.stuff.SomeService:osgi.service
  Eclipse-GenericCapability: org.acme.stuff.SomeService:osgi.service

Заголовок Plugin-Class

Заголовок Plugin-Class применяется только для поддержки модулей, разработанных на платформе Eclipse 2.1. Этот заголовок указывает имя класса, который используется для активации модуля с помощью старой модели активации из Eclipse 2.1. Этот заголовок не применяется с новыми комплектами, разработанными на платформе Eclipse 3.0 или более поздних версий. Ниже приведен пример заголовка Plugin-Class:

Plugin-Class: org.eclipse.foo.FooPlugin