Naturezas do Projeto

org.eclipse.core.resources.natures

O espaço 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 incentivados a incluir um valor legível para os usuários para o atributo "name" que identifique seu significado e potencialmente possa ser apresentado a 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.

A partir do release 3.1, as naturezas podem declarar afinidade com tipos de conteúdo arbitrários, afetando a determinação do tipo do conteúdo do modo que acontece com arquivos no espaço de trabalho. Em caso de conflito (dois ou mais tipos de conteúdo considerados igualmente adequados para um determinado arquivo), o tipo de conteúdo que tem afinidade com qualquer uma das naturezas configuradas para o projeto correspondente será escolhido.

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

<!ATTLIST extension

point CDATA #REQUIRED

id    CDATA #REQUIRED

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) >


<!ELEMENT content-type EMPTY>

<!ATTLIST content-type

id CDATA #REQUIRED>


A seguir, um exemplo das três configurações de natureza. 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".

O valor do atributo de classe deve representar uma implementação 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.

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