Description : l'espace de travail supporte la notion de natures de projet (appelées plus simplement "natures"). Une nature associe le comportement d'un cycle de vie à un projet. Les natures sont installées sur la base d'une par projet au moyen de la méthode setDescription method définie dans org.eclipes.core.resources.IProject. Elles sont configurées automatiquement lorsqu'elles sont ajoutées à un projet et déconfigurées lorsqu'elles sont supprimées d'un projet. Par exemple, la nature Java peut installer un générateur Java et effectuer une autre configuration de projet lorsqu'elle est ajoutée à un projet.
Le point d'extension des natures permet aux éditeurs de nature d'enregistrer leur implémentation de nature sous un nom symbolique qui est ensuite utilisé dans l'espace de travail pour trouver et configurer les natures. Ce nom symbolique est l'ID de l'extension de nature. Lors de la définition d'une extension de nature, les utilisateurs sont encouragés à inclure une valeur lisible par l'homme pour l'attribut "name" (nom) qui identifie leur signification et qui peut être potentiellement présenté aux utilisateurs.
Les natures peuvent spécifier des contraintes de relation avec d'autres natures. La contrainte "one-of-nature" spécifie qu'une seule nature appartenant à un ensemble donné peut exister dans un projet, à un moment donné. L'exclusion mutuelle des natures qui ne sont pas compatibles les unes avec les autres est ainsi mise en oeuvre. La contrainte "requires-nature" spécifie une dépendance vis à vis d'une autre nature. Lorsqu'une nature est ajoutée à un projet, toutes les natures requises doivent également être ajoutées. Les natures sont configurées et déconfigurées, de manière à ce que les natures requises qui leur sont propres soient toujours configurées avant elles et déconfigurées après. Pour cette raison, les dépendances cycliques entre les natures ne sont pas autorisées.
Les natures ne peuvent être ni ajoutées ni supprimées d'un projet lorsqu'un tel changement enfreint une quelconque contrainte préalablement respectée. Si une nature est configurée dans un projet, et qu'il s'avère ultérieurement que les contraintes qui y sont associées ne sont pas respectées, ladite nature ainsi que toutes celles qui sont requises sont marquées comme étant désactivées, mais sont maintenues dans le projet. Ce cas de figure peut se présenter lorsque, par exemple, une nature requise n'apparaît pas dans le répertoire d'installation. Les natures absentes du répertoire d'installation ainsi que celles qui sont impliquées dans des cycles de dépendance sont également marquées comme étant désactivées.
Les natures peuvent également spécifier les éventuels générateurs de projets incrémentiels qu'elles configurent. Ces informations permettent à l'espace de travail de s'assurer que les générateurs sont uniquement exécutés lorsque la nature correspondante est présente et activée dans le projet compilé. Si une nature est supprimée d'un projet, mais que la méthode de déconfiguration de la nature ne parvient pas à supprimer les générateurs correspondants, l'espace de travail supprime automatiquement ces générateurs de la spécification de compilation. Deux natures ne peuvent pas spécifier le même générateur de projet incrémentiel dans leur marque.
Les natures ont également la possibilité d'interdire la création de
ressources liées sur des projets auxquelles elles sont associées. En
définissant l'attribut allowLinking
à "false", une
nature peut déclarer qu'il est interdit de créer des ressources liées.
Il s'agit d'une nouvelle fonction de la version 2.1.
Marques de configuration :
<!ELEMENT extension (runtime , (one-of-nature | requires-nature | builder)* , options?)>
<!ATTLIST extension
point CDATA #REQUIRED
id CDATA #IMPLIED
name CDATA #IMPLIED
>
<!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)
>
<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>Si ces extensions étaient définies dans un plug-in avec l'ID "com.xyz.coolplugin", le nom qualifié complet de ces natures seraient "com.xyz.coolplugin.fireNature", "com.xyz.coolplugin.waterNature" et "com.xyz.coolplugin.snowNature".
Informations d'API : la valeur de l'attribut "class" doit représenter un réalisateur de org.eclipse.core.resources.IProjectNature. Les définitions de natures peuvent être consultées dans l'interface org.eclipse.core.resources.IProjectNatureDescriptor. Les objets du descripteur peuvent être obtenus au moyen des méthodes getNatureDescriptor(String) et getNatureDescriptors() dans org.eclipse.core.resources.IWorkspace.
Implémentation fournie : la plateforme n'a pas de nature prédéfinie. Les installations d'un produit particulier peuvent inclure les natures requises.
Copyright (c) 2003 IBM Corporation and others.
All rights reserved. Ce programme et les produits qui l'accompagnent sont
fournis sous licence v1.0 associée à cette distribution et disponibles à
l'adresse suivante :
http://www.eclipse.org/legal/cpl-v10.html