Salut,
D'après la documentation, je cite :
J'ai pu vérifier en effet que dans les implémentations de nature de plugin standard, comme par exemple org.eclipse.wst.common.project.facet.core.internal.FacetedProjectNature que c'est bien le cas.NOTE: The nature id is the fully qualified id of the nature extension. The fully qualified id of an extension is created by combining the plug-in id with the simple extension id in the plugin.xml file. For example, a nature with simple extension id "mynature" in the plug-in "com.example.natures" would have the name "com.example.natures.mynature"
The natures are not actually assigned to (and configured) for the project until you set the project description into the project. Also note that the identifier used for the nature is the fully qualified name (plug-in id + extension id) of the nature extension.
J'ai donc implémenté mon installation de nature en suivant cette préconisation :
Avec
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 final IProjectDescription description = project.getDescription(); final String[] natures = description.getNatureIds(); final String[] newNatures = new String[natures.length + 1]; System.arraycopy(natures, 0, newNatures, 0, natures.length); newNatures[natures.length] = WxmNature.NATURE_FULL_ID; IStatus status = project.getWorkspace().validateNatureSet(newNatures); if ( status.getCode()==IStatus.OK ) { description.setNatureIds(newNatures); project.setDescription(description, monitor); } else { throw new CoreException(status); }
"fr.wedia.wxm.nature" étant bien l'ID configuré dans l'extension.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 public class WxmNature implements IProjectNature { public static final String NATURE_ID = "fr.wedia.wxm.nature"; //$NON-NLS-1$ public static final String NATURE_FULL_ID = WxmDevToolsActivator.PLUGIN_ID + "." + NATURE_ID; //$NON-NLS-1$ /* ... */
Mais le validateNatureSet() soulève une exception qui dit que ma nature n'existe pas. Or, en debug, si je regarde la map des natures, je vois ma nature mappée sur l'id : fr.wedia.wxm.nature.
En modifiant mon code, de manière à utiliser NATURE_ID au lieu de NATURE_FULL_ID, l'installation de la nature passe sans exception. Et là je ne comprends pas pourquoi c'est en suivant pas la document et en ne faisant pas comme les implémentation des plugins standard (j'ai vérifier JavaCore.NATURE_ID également). Est-ce parce que mon id de nature n'est pas un id "simple" ? Est-ce qu'il y a une autre documentation qui présente le sujet de manière plus complète que j'aurais loupée ?
Est-ce que cela ne risque pas de me poser de problème plus tard : je comprends bien l'intérêt de rendre unique l'id de nature en le préfixant avec l'id de plugin. Du coup, ce n'est pas le cas de ma nature. Si j'ai fait comme ça, c'est parce que mon plugin est prévu pour gérer différents outils pour différents types de projet, ayant une nature différente. Je ne voyais pas pertinent de faire précéder mes ids de nature par l'id de plugin, et que du coup, je suis plutôt content de n'avoir pas le faire, mais j'aimerais avoir l'assurance que je peux vraiment faire comme çà.
Merci par avance de vos avis.
Partager