Cabeçalhos de Manifesto do Pacote Configurável OSGi

Versão 3.1 - Última revisão em 20 de junho de 2005

Um pacote configurável pode transportar informações descritivas sobre ele mesmo no arquivo de manifesto denominado META-INF/MANIFEST.MF. A especificação OSGi R4 Framework define um conjunto de cabeçalhos de manifesto, como por exemplo Pacote de Exportação e Caminho de Classe do Pacote Configurável, que os desenvolvedores de pacote configurável utilizam para fornecer informações descritivas sobre um pacote configurável. O Eclipse OSGi Framework implementa a especificação completa do OSGi R4 Framework e todos os serviços do Core Framework. Os serviços do OSGi R4 Core Framework incluem o seguinte:

Há vários serviços opcionais definidos na especificação do OSGi R4. Os serviços opcionais não estão incluídos com a implementação do Eclipse OSGi Framework. Para obter informações sobre os cabeçalhos e serviços de manifesto do OSGi R4, consulte a Especificação do OSGi R4.

Cabeçalhos de Manifesto do Pacote Configurável do Eclipse

O Eclipse OSGi Framework suporta vários cabeçalhos e diretivas de manifesto do pacote configurável adicional. Um desenvolvedor de pacote configurável pode utilizar esses cabeçalhos e diretivas para se beneficiar de alguns recursos adicionais do Eclipse OSGi Framework, os quais não são especificados como parte de um OSGi R4 Framework padrão.

Diretivas Adicionais do Pacote de Exportação

O Eclipse OSGi Framework suporta diretivas adicionais no cabeçalho Pacote de Exportação. Essas diretivas são utilizadas para especificar as regras de restrição de acesso de um pacote exportado. Consulte osgi.resolverMode para configurar o Eclipse OSGi Framework para aplicar as regras de restrições de acesso no tempo de execução.

A Diretiva x-internal

Essa diretiva pode ser utilizada em um cabeçalho Pacote de Exportação, para especificar se o pacote é um pacote interno. O Ambiente de Desenvolvimento de Plug-in desaconselhará outros pacotes configuráveis de utilizarem um pacote interno. Se a diretiva x-internal não for especificada, um valor padrão 'false' será utilizado. Tal diretiva deve utilizar a seguinte sintaxe:

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

A seguir encontra-se um exemplo da diretiva x-internal:

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

A Diretiva x-friends

Essa diretiva pode ser utilizada em um cabeçalho Pacote de Exportação, para especificar uma lista de pacotes configuráveis que são permitidos acessar o pacote. O Ambiente de Desenvolvimento de Plug-in desaconselhará outros pacotes configuráveis de utilizarem o pacote. Tal diretiva deve utilizar a seguinte sintaxe:

x-friends ::= '"' ( target-bundle ) ( ',' target-bundle ) * '"'
target-bundle ::= a bundle symbolic name

A seguir encontra-se um exemplo da diretiva x-friends:

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

O exemplo especifica que apenas os pacotes configuráveis org.eclispe.foo.friend1 e org.eclipse.foo.friend2 devem ser encorajados a utilizar o pacote org.eclipse.foo.formyfriends. O pacote x-internal tem prioridade sobre a diretiva x-friends. Se a diretiva x-internal especificar 'true', o Ambiente de Desenvolvimento de Plug-in desaconselhará todos os pacotes configuráveis de utilizarem o pacote, mesmo se eles forem especificados como um amigo.

O Cabeçalho Eclipse-AutoStart

Esse cabeçalho é utilizado para especificar se um pacote configurável deve ser iniciado automaticamente antes da primeira classe ou o recurso será acessado de tal pacote. Esse recurso permite ao Eclipse ativar pacotes configuráveis on demand pela primeira vez, quando necessário. Utilizando esse modelo, o Eclipse pode inicializar alguns pacotes configuráveis ativos quando possível. Esse cabeçalho deve utilizar a seguinte sintaxe:

Eclipse-AutoStart ::= ( 'true' | 'false' ) ( ';' 'exceptions' '=' '"' exceptions-list '"' ) ?
exceptions-list ::= a comma ',' separated list of packages

O atributo 'exceptions' é utilizado para especificar uma lista de pacotes que não deve fazer com que o pacote configurável seja ativado, quando as classes ou recursos forem carregados deles. Se o cabeçalho Eclipse-AutoStart não for definido no manifesto do pacote configurável, então, um valor padrão 'false' será utilizado. A seguir encontra-se um exemplo do cabeçalho Eclipse-AutoStart:

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

O exemplo especifica que esse pacote configurável deve ser ativado por quaisquer classes ou recursos carregados desse pacote, exceto as classes e recursos nos pacotes 'org.eclipse.foo1' e 'org.eclipse.foo2'.

O Cabeçalho Eclipse-PlatformFilter

O Eclipse-PlatformFilter é utilizado para especificar um filtro de plataforma para um pacote configurável. Um filtro de plataforma deve ser avaliado como verdadeiro em uma plataforma em execução, para que seja permitido um pacote configurável para resolução. Esse cabeçalho deve utilizar a seguinte sintaxe:

Eclipse-PlatformFilter ::= a valid LDAP filter string

O Framework suporta a filtragem nas seguintes propriedades de sistema:

A seguir encontra-se um exemplo do cabeçalho Eclipse-PlatformFilter:

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

Esse exemplo especifica que esse pacote configurável apenas poderá ser resolvido, se as propriedades da plataforma forem osgi.ws=win32, osgi.os=win32 e osgi.arch=x86. Em outras palavras, um a plataforma sendo executada em uma arquitetura x86, utilizando um sistema operacional win32 e um sistema de janelas win32.

O Cabeçalho Eclipse-BuddyPolicy

Esse cabeçalho é utilizado para especificar as políticas de carregamento de classe de parceria para um pacote configurável. Ele deve utilizar a seguinte sintaxe:

Eclipse-BuddyPolicy ::= ( policy-name ) ( ',' policy-name ) *
policy-name ::= ( 'dependent' | 'global' | 'registered' |
                  'app' | 'ext' | 'boot' | 'parent' )

A seguir encontra-se um exemplo do cabeçalho Eclipse-BuddyPolicy:

Eclipse-BuddyPolicy: dependent

O Cabeçalho Eclipse-RegisterBuddy

Esse cabeçalho é utilizado para especificar uma lista de pacotes configuráveis, para os quais esse pacote configurável é uma parceria registrada. Esse cabeçalho deve utilizar a seguinte sintaxe:

Eclipse-RegisterBuddy ::= ( target-bundle ) ( ',' target-bundle ) *
target-bundle ::= a bundle symbolic name

A seguir encontra-se um exemplo do cabeçalho Eclipse-RegisterBuddy:

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

O Cabeçalho Eclipse-ExtensibleAPI

O Eclipse-ExtensibleAPI é utilizado para especificar se um pacote configurável do host permite que os pacotes configuráveis de fragmentos incluam a API adicional no host. Esse cabeçalho deve ser utilizado se um pacote configurável do host quiser permitir que os fragmentos incluam pacotes adicionais na API do host. Se esse cabeçalho não for especificado, um valor padrão 'false' será utilizado. Ele deve utilizar a seguinte sintaxe:

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

A seguir encontra-se um exemplo do cabeçalho Eclipse-ExtensibleAPI:

Eclipse-ExtensibleAPI: true

O Cabeçalho Plugin-Class

Esse cabeçalho apenas é utilizado para suportar plug-ins desenvolvidos para a plataforma Eclipse 2.1. Ele é utilizado para especificar um nome de classe que será utilizado para ativar um plug-in, usando o modelo de ativação do Eclipse 2.1 anterior. Novos pacotes configuráveis desenvolvidos para a plataforma Eclipse 3.0 ou superior não devem utilizar esse cabeçalho. A seguir encontra-se um exemplo do cabeçalho Plugin-Class:

Plugin-Class: org.eclipse.foo.FooPlugin