Plataforma Eclipse
Manifest de Plug-in
Versão 0.90 - Última revisão: 15 de março de 2001
As definições de marcação do manifest 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 | 'exportar' 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 definição DTD do seu conjunto.
<?xml encoding="US-ASCII"?>
<plug-in !ELEMENT (exigências?, tempo de execução?, ponto de extensão*, extensão*)>
<plug-in !ATTLIST
nome CDATA #NECESSÁRIO
id CDATA #NECESSÁRIO
versão CDATA #NECESSÁRIO
nome do fornecedor CDATA #ENVOLVIDO
classe CDATA #ENVOLVIDO
>
O elemento do <plug-in> define o corpo do manifest. Ele pode contém
definições para o tempo de execução do plug-in, 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 esses plug-in). Os atributos do <plug-in> são os seguintes:
-
nome - nome de usuário visível (inteligível) para o plug-in
-
id - identificador exclusivo para o plug-in.
-
Para minimizar o potencial de confronto entre nomenclaturas, o identificador deve ser derivado
de um id domínio de internet do fornecedor (reverter tokens de nomes
e anexar tokens de nomes adicionais separados por ponto [.]).
Por exemplo, o fornecedor ibm.com poderia definir o identificador do plug-in como com.ibm.db2
-
[regra de produção: PlugInId]
-
versão - número da versão do plug-in. Consulte org.eclipse.core.runtime.PluginVersionIdentifier
para obter mais detalhes. O formato da versão do plug-in é principal.inferior.serviço. Uma alteração
in no componente principal é interpretada como uma alteração de versão incompatível.
Alterações no componente inferior são interpretadas como alterações de versão compatíveis.
Alterações no componente de serviço são interpretadas como serviços cumulativos
aplicados à versão inferior.
-
nome do fornecedor - nome de usuário visível do fornecedor do plug-in.
-
classe - nome da classe do plug-in para esse plug-in. A classe deve
ser uma classe filha de org.eclipse.core.runtime.Plugin.
O elemento* regra de construção do XML DTD significa nenhuma ou mais
ocorrências do elemento; 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 do manifest <exigida> declara qualquer dependência
a outros plug-ins.
< exigências do !ELEMENT (importar+)>
<!ELEMENT importar EMPTY>
<importar !ATTLIST
plug-in CDATA #NECESSÁRIO
versão CDATA #ENVOLVIDO
correspondência (exata | compatível) "compatível"
exportar (verdadeiro | falso) "falso"
>
Cada dependência é especificada usando um elemento <importado>. Ele contém
os seguintes atributos:
-
plug-in - identificador do plug-in exigido
-
versão - especificação de versão opcional
-
correspondência - regras de correspondência de versão. Ignorada se os atributos da versão não forem
especificados. Determina se a dependência é satisfatória somente com um plug-in
de versão especificada (possivelmente com serviços adicionais aplicados) ou se a dependência pode ser satisfatória com qualquer versão compatível (incluindo
uma versão inferior mais recente do plug-in)
-
exportar - especifica se as classes de plug-in dependentes são
visíveis (são (re)exportadas) para os usuários desse plug-in. Por padrão, as classes
dependentes não são exportadas (não estão visíveis)
A seção de <tempo de execução> do manifest contém
uma definição de uma ou mais bibliotecas que constitui 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.
<tempo de execução do!ELEMENT (biblioteca+)>
<biblioteca do !ELEMENT (exportar*)>
<biblioteca do !ATTLIST
nome CDATA #NECESSÁRIO
>
<!ELEMENT exportar EMPTY>
<exportar !ATTLIST
nome CDATA #NECESSÁRIO
>
O elemente 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:
-
nome - referência de cadeia para o arquivo ou diretório de biblioteca contendo
classes (relativas ao diretório de instalação do plug-in). As referência de diretório
devem conter separadores de arquivo.
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:
-
nome - especifica as máscaras de exportação. Os valores válidos são:
-
* - indica que todo o conteúdo da biblioteca é exportado (público)
-
nome do pacote.* - indica que todas as classes no pacote especificado são exportadas.
As regras de correspondência são as mesmas na instrução de importação do Java.
-
nome da classe - nome da classe java totalmente qualificado
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 pontos de extensão EMPTY>
< pontos de extensão do !ATTLIST
nome CDATA #NECESSÁRIO
id CDATA #NECESSÁRIO
esquema CDATA #ENVOLVIDO
>
Os elementos de <pontos de extensão> têm os seguintes atributos:
-
nome - nome de usuário visível (inteligível) para os pontos de extensão
-
id - token de id simples, exclusivos dentro desse plug-in. Os tokens não podem conter
pontos (.) ou espaços em branco.
-
[regras de produção: ExtensionPointId]
-
esquema - especificação do esquema para esses pontos de extensão. Os detalhes exatos
são definidos como uma parte do Ambiente de Desenvolvimento do Plug-In (PDE, Plug-In Development Environment).
Atualmente o esquema não é usado no tempo de execução. A referência é um
nome de arquivo relativo à localização da instalação do plug-in.
Extensões reais são configuradas nos pontos de extensão (predefinidas ou
declaradas nesse plug-in) na seção <extensão>. A informação de configuração
é especificada como um XML bem formado contido entre a <extensão>
e as marcações de </extensão>. 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 extensão ANY>
<extensão do !ATTLIST
ponto CDATA #NECESSÁRIO
id CDATA #ENVOLVIDO
nome CDATA #ENVOLVIDO
>
O elemento de <extensão> tem os seguintes atributos:
-
ponto - referência a um ponto de extensão sendo configurado. O ponto de extensão pode ser
definido nesse plug-in ou em outro plug-in
-
[regras de produção: ExtensionPointReference]
-
id - identificador opcional para essa ocorrência de configuração de ponto de
extensão. Isso é usado por pontos de extensão que precisam identificar exclusivamente
(mais que uma mera enumeração) as extensões específicas configuradas. O identificador
é especificado como um token simples e exclusivo dentro da definição
plug-in declarado. Quando usado de modo global, o identificador de extensão é qualificado pelo
identificador do plug-in
-
[regras de produção: ExtensionId]
-
nome - nome do usuário visível (inteligível) para a extensão
Importante: o conteúdo do elemento de <extensão> é 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 a <extensão>
e as marcações de </extensão>).