Заголовки манифеста комплекта 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 ::= '"' ( целевой-комплект ) ( ',' целевой-комплект ) * '"'
целевой-комплект ::= a bundle symbolic name

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

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

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

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

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

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

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

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

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

Заголовок 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

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

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

Plugin-Class: org.eclipse.foo.FooPlugin