Manifesto de Plug-in da Plataforma Eclipse

Versão 2.1 - Última revisão em 17 de março de 2003

As definições de marcação do manifesto abaixo usam vários tokens e identificadores de nomenclatura. Para eliminar a ambigüidade, seguem algumas regras de produção para essas definições [elas são mencionadas no texto abaixo]. Em geral, todos os identificadores são estabelecidos pela distinção entre maiúsculas e minúsculas.

SimpleToken := seqüência de caracteres de ('a-z','A-Z','0-9') 
ComposedToken := SimpleToken | (SimpleToken '.' ComposedToken) 
JavaClassName := ComposedToken 
PlugInId := ComposedToken
PlugInPrereq := PlugInId | 'export' PlugInId 
ExtensionId := SimpleToken 
ExtensionPointId := SimpleToken 
ExtensionPointReference := ExtensionPointID | (PlugInId '.' ExtensionPointId)

O restante dessa seção descreve a estrutura do arquivo plugin.xml como uma série de fragmentos DTD. O arquivo plugin.dtd apresenta a definição de DTD em sua totalidade.

<?xml encoding="US-ASCII"?> 
<!ELEMENT plugin (requires?, runtime?, extension-point*, extension*)> 
<!ATTLIST plugin 
  name                CDATA #REQUIRED 
  id                  CDATA #REQUIRED 
  version             CDATA #REQUIRED 
  provider-name       CDATA #IMPLIED
  class               CDATA #IMPLIED 
>

O elemento <plug-in> define o corpo do manifesto. Ele opcionalmente contém definições para o tempo de execução do plug-in, definições de outros plug-ins requeridos por este, declarações de quaisquer novos pontos de extensão introduzidos pelo plug-in, bem como configurações de extensões funcionais (configuradas em pontos de extensão definidos por outros plug-ins ou introduzidos por esse plug-in). Os atributos do <plug-in> são os seguintes:

O elemento* regra de construção do XML DTD significa nenhuma ou mais ocorrências do elemento; o elemento? significa nenhuma ou uma ocorrência do elemento; o elemento+ (usado abaixo) significa uma ou mais ocorrências do elemento.Baseado na definição de <plug-in> acima, isso significa, por exemplo, que um plug-in contendo somente uma definição de tempo de execução e nenhuma declaração de pontos de extensão ou configuração de extensão é válido (por exemplo, bibliotecas comuns das quais outros plug-ins dependem). De modo semelhante, um plug-in contendo somente configurações de extensão e nenhum tempo de execução ou ponto de extensão próprios também é válido (por exemplo, classes configuradas entregues em outros plug-ins em pontos de extensão declarados em outros plug-ins).

A seção <requires> do manifesto declara qualquer dependência a outros plug-ins.

<!ELEMENT requires (import+)>
<!ELEMENT import EMPTY>
<!ATTLIST import
 plugin               CDATA #REQUIRED
 version              CDATA #IMPLIED
 match                (perfect | equivalent | compatible | greaterOrEqual) "compatible"
 export               (true | false) "false"
 optional             (true | false) "false"
>

Cada dependência é especificada usando um elemento <importado>.Ele contém os seguintes atributos:

A seção <runtime> do manifesto contém a definição de uma ou mais bibliotecas que constituem o tempo de execução do plug-in. As bibliotecas mencionadas são usadas pelos mecanismos de execução da plataforma (o carregador de classe do plug-in) para carregar e executar o código correto exigido pelo plug-in.

<!ELEMENT runtime (library+)> 
<!ELEMENT library (export*, packages?)>
<!ATTLIST library 
  name               CDATA #REQUIRED 
  type               (code | resource) "code"
>
<!ELEMENT export EMPTY> 
<!ATTLIST export
  name               CDATA #REQUIRED 
>
<!ELEMENT packages EMPTY>
<!ATTLIST packages
  prefixes           CDATA #REQUIRED
>

O elemento de <tempo de execução> não tem atributos.

Os elementos de <biblioteca> coletivamente definem o tempo de execução do plug-in.Pelo menos uma <biblioteca> deve ser especificada.Cada elemento de <biblioteca> tem os seguintes atributos:

Cada elemento de <biblioteca> pode especificar qual parte da biblioteca deverá ser exportada.As regras de exportação são especificadas como um conjunto de máscaras de exportação. Por padrão (nenhuma regra de exportação especificada), a biblioteca é considerada particular. Os elementos de <exportação> têm os seguintes atributos:

Cada biblioteca também pode especificar os prefixos do pacote. Eles são utilizados para aumentar o desempenho de classloading para o plug-in e/ou fragmento. Se o elemento <packages> não for especificado, os aprimoramentos de classloading não serão usados por padrão. O elemento <packages> possui o seguinte atributo:

Informações mais detalhadas sobre os prefixos de pacotes podem ser localizadas aqui.

A arquitetura da plataforma é baseada na noção de pontos de extensão configuráveis. A própria plataforma predefine um conjunto de pontos de extensão que cobrem a tarefa de ampliar a plataforma e o desktop (por exemplo, incluindo um menu de ações, contribuindo com editores incorporados). Além dos pontos de extensão predefinidos, cada plug-in fornecido pode declarar pontos de extensão adicionais. Declarando um ponto de extensão, o plug-in está essencialmente promovendo sua habilidade de configurar a função de plug-in com extensões fornecidas externamente. Por exemplo, o plug-in Page Builder pode declarar um ponto de extensão para adicionar novos DTCs (Design Time Controls) à paleta de construção. Isso significa que o Page Builder definiu uma arquitetura que significa ser um DTC e implementou o código que procura por extensões DTC que foi configurada nos pontos de extensão.

<!ELEMENT extension-point EMPTY>  
<!ATTLIST extension-point 
  name               CDATA #REQUIRED 
  id                 CDATA #REQUIRED    
  schema             CDATA #IMPLIED 
>

Os elementos de <pontos de extensão> têm os seguintes atributos:

Extensões reais são configuradas nos pontos de extensão (predefinidas ou declaradas nesse plug-in) na seção <extension>. A informação de configuração é especificada como um XML bem formado contido entre as marcações <extension> e </extension>.A plataforma não especifica o formulário real da marcação de configuração (além de exigir que ele seja um XML bem formado). A marcação é definida pelo fornecedor do plug-in que declara dos pontos de extensão. A plataforma, na verdade, não interpreta a marcação de configuração. Ela simplesmente transmite as informações de configuração ao plug-in como parte do processamento dos pontos de extensão (no momento em que os pontos de extensão lógicos consultam todas as suas extensões configuradas).

<!ELEMENT extension ANY> 
<!ATTLIST extension 
  point              CDATA #REQUIRED 
  id                 CDATA #IMPLIED 
  name               CDATA #IMPLIED 
>

O elemento de <extension> tem os seguintes atributos:

Importante: O conteúdo do elemento <extension> é declarado usando-se a regra ANY. Isso significa que um XML bem formado pode ser especificado dentro da seção de configuração da extensão (entre as marcações <extension> e </extension>).

Os fragmentos são utilizados para aumentar o escopo de um plug-in.  Um exemplo seria incorporar dados tais como mensagens ou rótulos em outro idioma.

<?xml encoding="US-ASCII"?> 
<!ELEMENT fragment (requires?, runtime?, extension-point*, extension*)>
<!ATTLIST fragment
  name                CDATA #REQUIRED
  id                  CDATA #REQUIRED
  version             CDATA #REQUIRED
  provider-name       CDATA #IMPLIED
  plugin-id           CDATA #REQUIRED
  plugin-version      CDATA #REQUIRED
  match               (perfect | equivalent | compatible | greaterOrEqual) "compatible"
>

Cada fragmento deve estar associado a um plug-in específico. O plug-in associado é identificado com <ID do plugin>, <versão do plug-in> e, opcionalmente, <correspondência>. Observe que, se essa especificação corresponder a mais de um plug-in, o plug-in correspondente ao número da versão superior será utilizado.

Os componentes <requires>, <runtime>, <extension-point> e <extension> de um fragmento serão logicamente incluídos ao plug-in correspondente.

Os atributos de <fragmento> são os seguintes:

Copyright IBM Corporation e outros 2000, 2003.