Les natures du projet permettent à un plug-in de marquer un projet en tant que type spécifique de projet. Par exemple, les outils de développement Java (JDT) utilisent une "nature Java" pour ajouter un comportement spécifique à Java aux projets. Les natures de projets sont définies par des plug-ins et généralement ajoutées ou supprimées par projet lorsque l'utilisateur effectue une action déterminée par le plug-in.
Un projet peut posséder plusieurs natures. Toutefois, lorsque vous définissez la nature d'un projet, vous pouvez préciser des contraintes particulières :
Pour implémenter votre propre nature, vous devez définir une extension et fournir une classe qui implémente IProjectNature.
Le point d'extension org.eclipse.core.resources.natures est utilisé pour ajouter une définition de nature de projet. Les marques ci-dessous ajoutent une nature au plug-in hypothétique com.example.natures.
<extension point="org.eclipse.core.resources.natures" id="mynature" name="My Nature"> <runtime> <run class="com.example.natures.MyNature"> </run> </runtime> </extension>
La classe identifiée dans l'extension doit implémenter l'interface de la plate-forme IProjectNature. Cette classe implémente un comportement spécifique du plug-in pour l'association d'informations spécifiques à la nature à un projet lorsque la nature est configurée.
public class MyNature implements IProjectNature { private IProject project; public void configure() throws CoreException { // Add nature-specific information // for the project, such as adding a builder // to a project's build spec. } public void deconfigure() throws CoreException { // Remove the nature-specific information here. } public IProject getProject() { return project; } public void setProject(IProject value) { project = value; } }
Les méthodes configure() et deconfigure() sont envoyées par la plate-forme lorsque des natures sont ajoutées et supprimées d'un projet. Vous pouvez implémenter la méthode configure() pour ajouter un générateur à un projet comme expliqué à la section Générateurs.
Il ne suffit pas de définir la nature pour l'associer à un projet. Vous devez assigner la nature à un projet en mettant à jour la description de ce dernier pour inclure votre nature. Ce cas se produit en général lorsqu'un utilisateur crée un projet à l'aide d'un assistant affectant la nature. Le fragment de code suivant illustre comment assigner une nouvelle nature à un projet donné.
try { IProjectDescription description = project.getDescription(); String[] natures = description.getNatureIds(); String[] newNatures = new String[natures.length + 1]; System.arraycopy(natures, 0, newNatures, 0, natures.length); newNatures[natures.length] = "com.example.natures.mynature"; description.setNatureIds(newNatures); project.setDescription(description, null); } catch (CoreException e) { // Something went wrong }
Remarque : L'ID de la nature est l'ID de l'extension nature pleinement qualifiée. L'ID pleinement qualifiée d'une extension est créée en combinant l'ID du plug-in avec l'ID simple de l'extension dans le fichier plugin.xml. Par exemple, un générateur avec une ID d'extension simple "mynature" dans le plug-in "com.example.natures" aura pour nom "com.example.natures.mynature"
Les natures ne sont pas assignées (et configurées) tant que vous n'avez pas défini la description du projet. Par ailleurs, l'identificateur utilisé pour la nature est le nom qualifié complet (ID du plug-in + ID de l'extension) de l'extension de la nature.
Si la nature a été définie avec des contraintes, l'API de l'espace de travail peut être utilisée pour valider la nouvelle nature. Par exemple, imaginez qu'une nature soit définie avec une condition :
<extension point="org.eclipse.core.resources.natures" id="myOtherNature" name="My Other Nature"> <runtime> <run class="com.example.natures.MyOtherNature"> </run> </runtime> <requires-nature id="com.example.natures.mynature"/> </extension>
La nouvelle nature n'est pas valide si la première n'existe pas pour le projet. Selon la conception de votre plug-in, vous pouvez vérifier si la nature de la condition requise a été installée ou bon l'ajouter vous-même. Dans tous les cas, vous pouvez vérifier la validité des combinaisons de natures de projet à l'aide de l'API de l'espace de travail.
try { IProjectDescription description = project.getDescription(); String[] natures = description.getNatureIds(); String[] newNatures = new String[natures.length + 1]; System.arraycopy(natures, 0, newNatures, 0, natures.length); newNatures[natures.length] = "com.example.natures.myOtherNature"; IStatus status = workspace.validateNatureSet(natures); // check the status and decide what to do if (status.getCode() == IStatus.OK) { description.setNatureIds(newNatures); project.setDescription(description, null); } else { // raise a user error ... } } catch (CoreException e) { // Something went wrong }
Outre la manipulation de natures à l'aide de leur ID, vous pouvez obtenir le descripteur (IProjectNatureDescriptor) décrivant une nature, ses contraintes et son intitulé. Vous pouvez interroger une nature déterminée pour connaître son descripteur ou extraire des descripteurs de l'espace de travail. Le fragment de code suivant extrait le descripteur de pour une nature du projet :
IProjectNatureDescriptor descriptor = workspace.getNatureDescriptor("com.example.natures.myOtherNature");
Vous pouvez également obtenir un ensemble de descripteurs pour des natures installées :
IProjectNatureDescriptor[] descriptors = workspace.getNatureDescriptors();