Naturezas do Projeto

Identificador: org.eclipse.core.resources.natures

Descrição: A área de trabalho suporta a percepção de naturezas do projeto (ou a abreviação "naturezas"). Uma natureza associa o comportamento do ciclo de vida a um projeto. As naturezas são instaladas por projeto com o método setDescription, definido em org.eclipes.core.resources.IProject. Elas são configuradas automaticamente quando um projeto é aberto e desconfiguradas quando um projeto é encerrado. Por exemplo, a natureza Java, quando incluída em um projeto, pode instalar um construtor Java e executar a configuração de outro projeto

O ponto de extensão das naturezas permite aos escritores registrar as suas implementações de natureza sob um nome simbólico que é então utilizado de dentro da área de trabalho para encontrar e configurar as naturezas. O nome simbólico é o id da extensão de natureza. Ao definir uma extensão de natureza, os usuários são encorajados a incluir um valor legível a seres humanos no atributo rth e "name", o qual identifica seus significados e potencialmente pode ser apresentado aos usuários.

As naturezas podem especificar restrições de relacionamentos com outras naturezas. A restrição "alguma natureza" especifica que pelo menos uma natureza pertencente a um conjunto específico pode existir em um projeto em um determinado momento. Isso reforça a exclusão mútua entre naturezas que não são compatíveis. A restrição "natureza requerida" especifica uma dependência em outra natureza. Quando uma natureza é incluída em um projeto, todas as naturezas requeridas também devem ser incluídas. Há garantias de que as naturezas requeridas nas naturezas configuradas e desconfiguradas dessa forma serão sempre configuradas antes delas e desconfiguradas depois delas. Por essa razão, as dependências cíclicas entre naturezas não são permitidas.

As naturezas não podem ser incluídas ou removidas de um projeto se essa alteração violar qualquer restrição atendida anteriormente. Se uma natureza for configurada em um projeto e, posteriormente, achar que suas restrições não são satisfatórias, essa natureza e todas as naturezas que as exigem serão marcadas como desativadas, mas permanecerão no projeto. Isso pode acontecer, por exemplo, quando uma natureza requerida está ausente na instalação. As naturezas ausentes na instalação e as naturezas envolvidas nos ciclos de dependência também são marcadas como desativadas.

As naturezas também podem especificar quais construtores de projetos incrementais, se houver algum, são configurados por elas. Com essa informação, a área de trabalho garantirá que os construtores serão executados apenas quando suas naturezas correspondentes estiverem presentes e ativadas no projeto que está sendo criado. Se uma natureza for removida de um projeto, mas o método de desconfiguração da natureza falhar ao remover seus construtores correspondentes, a área de trabalho removerá automaticamente esses construtores da especificação. Não é permitido que duas naturezas especifiquem o mesmo construtor de projeto incremental em suas marcações.

As naturezas também podem desaprovar a criação de recursos vinculados a projetos aos quais elas estão associadas. Definindo o atributo allowLinking como "false", uma natureza pode declarar que os recursos vinculados não devem ser criados nunca. Esse recurso é novo no release 2.1.

Marcação da Configuração:

   <!ELEMENT extension (runtime , (one-of-nature | requires-nature | builder)* , options?)>

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

   <!ELEMENT runtime (run)>

   <!ELEMENT run (parameter*)>

   <!ATTLIST run
      class CDATA #REQUIRED
   >

   <!ELEMENT parameter EMPTY>

   <!ATTLIST parameter
     name  CDATA #REQUIRED
     value CDATA #REQUIRED
   >

   <!ELEMENT one-of-nature EMPTY>

   <!ATTLIST one-of-nature
      id CDATA #REQUIRED
   >

   <!ELEMENT requires-nature EMPTY>

   <!ATTLIST requires-nature
      id CDATA #REQUIRED
   >

   <!ELEMENT builder EMPTY>

   <!ATTLIST builder
      id CDATA #REQUIRED
   >

   <!ELEMENT options EMPTY>

   <!ATTLIST options
     allowLinking (true | false)
   >

Exemplos: A seguir, um exemplo de três configurações de naturezas. WaterNature e fireNature pertencem ao mesmo conjunto exclusivo e, portanto, não podem co-existir no mesmo projeto. SnowNature requer waterNature, portanto, snowNature será desativada em um projeto que não tenha waterNature. Da mesma maneira, snowNature não pode ser ativada em um projeto com fireNature. FireNature também não permite a criação de recursos vinculados.

 
   <extension id="fireNature" name="Fire Nature" point="org.eclipse.core.resources.natures"> 
       <runtime>
           <run class="com.xyz.natures.Fire"/> 
       </runtime> 
       <one-of-nature id="com.xyz.stateSet"/>
       <options allowLinking="false"/>
   </extension>
   
   <extension id="waterNature" name="Water Nature" point="org.eclipse.core.resources.natures">
       <runtime>
           <run class="com.xyz.natures.Water"/>
       </runtime>
       <one-of-nature id="com.xyz.stateSet"/>
   </extension>
   
   <extension id="snowNature" name="Snow Nature" point="org.eclipse.core.resources.natures">
       <runtime>
           <run class="com.xyz.natures.Snow">
               <parameter name="installBuilder" value="true"/>
           </run>
       </runtime>
       <requires-nature id="com.xyz.coolplugin.waterNature"/>
       <builder id="com.xyz.snowMaker"/>
   </extension>

Se esta extensão foi definida em um plug-in com id "com.xyz.coolplugin", o nome completo destas naturezas seria "com.xyz.coolplugin.fireNature", "com.xyz.coolplugin.waterNature" e "com.xyz.coolplugin.snowNature".

Informações de API: O valor do atributo class deve representar um implementador de org.eclipse.core.resources.IProjectNature. As definições de natureza podem ser examinadas utilizando a interface org.eclipse.core.resources.IProjectNatureDescriptor. Os objetos do descritor podem ser obtidos utilizando os métodos getNatureDescriptor(String) e getNatureDescriptors() em org.eclipse.core.resources.IWorkspace.

Implementação Fornecida: A plataforma por si só não tem naturezas pré-definidas. Instalações especiais do produto podem incluir naturezas, conforme pedido.

Copyright (c) 2003 IBM Corporation e outros. Todos os direitos reservados. Este programa e os materiais que o acompanham são disponibilizados sob os termos da Common Public License v1.0 que acompanha esta distribuição e estão disponíveis no endereço http://www.eclipse.org/legal/cpl-v10.html