Comment créer une nouvelle nature de projet ?

Ce billet entame une série de billets de type howto que je compte rédiger autour d’Eclipse en tant que plateforme de développement et non plus comme IDE.

Disons que c’est une sorte d’aide mémoire, pour moi certainement, et pour vous aussi je l’espère.

Le style sera un peu minimaliste : je vais aller directement à l’essentiel et au pratique, sans détailler la théorie de la chose : je vais montrer comment faire telle chose, pas ce qu’elle est ou à quoi elle sert.

Commençons par un point simple : Comment créer une nouvelle nature de projet ?

1. Définir la classe de la nature

Dans le plug-in qui va définir cette nature, modifier le manifest (META-INF/MANIFEST.MF) pour ajouter le bundle org.eclipse.core.resources (qui définit l’interface IProjectNature ainsi que le point d’extension org.eclipse.core.resources.natures) et org.eclipse.core.runtime (qui définit CoreException) :

Require-Bundle: org.eclipse.core.resources,
org.eclipse.core.runtime

Créez ensuite une classe qui implémente org.eclipse.core.resources.IProjectNature :

package com.developpez.djo.howto.nature;

import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IProjectNature;
import org.eclipse.core.runtime.CoreException;

public class DummyNature implements IProjectNature {
  public static final String NATURE_ID = "com.developpez.djo.howto.nature.dummyNature";

  private IProject project;

  public void configure() throws CoreException {

  }

  public void deconfigure() throws CoreException {

  }

  public IProject getProject() {
    return project;
  }

  public void setProject(IProject project) {
    this.project = project;
  }
}

Notez le champ NATURE_ID que j’ai mis en public car ça va servir pour récupérer l’identifiant de la nature lors de son affectation à un projet par exemple.

2. Déclarer la nature dans plugin.xml

Il faut ensuite déclarer la nature dans plugin.xml :

<extension
         id="dummyNature"
         name="Ma nature de projets"
         point="org.eclipse.core.resources.natures">
      <runtime>
         <run
               class="com.developpez.djo.howto.nature.DummyNature">
         </run>
      </runtime>
</extension>

N.B. (casse gueule)

Là il vous faut être attention : dans l’attribut id, il faut mettre seulement la partie de l’identifiant de la nature qui vient après l’identifiant du plugin.

Par exemple, dans ce cas ci, le plugin qui définit la nature a comme identifiant “com.developpez.djo.howto” (déclare dans le manifest) :

Bundle-SymbolicName: com.developpez.djo.howto.nature;singleton:=true

L’identifiant complet de la nature est calculé de cette façon :

<nom-symbloique-du-bundle> . <id-de-la-nature-tel-que-saisi-dans-plugin.xml>

com.developpez.djo.howto.nature . dummyNature

Ce qui donne : com.developpez.djo.howto.nature.dummyNature, et c’est cette valeur là qu’il faut mettre dans le champ NATURE_ID.

3. Associer une image (overlay) à la nature

Pour associer une image à la nature (c’est un overlay qui sera affiché au dessus de l’icône du dossier bleu d’un projet), il faut passer par un autre point d’extension qui est “org.eclipse.ui.ide.projectNatureImages” qui se trouve dans le plug-in “org.eclipse.ui.ide”. il vous faut donc ajouter ce plugin dans la section Require-Bundle du manifest (quoi que j’ai remarqué que même si j’ajoute pas une dépendance vers ce plugin, ça fonctionne quand même), et ensuite, dans plugin.xml, ajoutez :

<extension
         point="org.eclipse.ui.ide.projectNatureImages">
      <image
            icon="icons/dummy-nature.png"
            id="com.developpez.djo.howto.nature.dummyNature.img"
            natureId="com.developpez.djo.howto.nature.dummyNature">
      </image>
</extension>

Dans icon, utilisez le nom relatif d’une icône (de petite taille de préférence, genre 8×8). Dans id, renseigner n’importe quoi du moment que ça reste unique et un identifiant valide. Personnellement, j’ajoute “.img” à l’id de la nature. Enfin, dans natureId, renseigner l’identifiant complet de la nature.

N.B. (casse gueule)

N’oubliez pas d’inclure le dossier icons dans le binary build.

4. Source

Projet Eclipse (dans un jar) : com.developpez.djo.howto.nature.source_1.0.0.jar

About these ads

2 Responses to Comment créer une nouvelle nature de projet ?

  1. Pingback: Howto create a new project nature in Eclipse « Jawher's Blog

  2. emna says:

    Bonjour,

    j’ai lu votre article , j’ai téléchargé le projet et je l’ai decompressé dans les plugins d’eclipse puis j’ai lancé eclipse pour tester le plugin mais j’ai rien remarqué !
    en fait j’ai pas compris où va apparaitre la modification apportée par le plugin .

    ce que je vais faire dans ma tâche c’est un plugin qui me permettra d’ajouter un nouveau type de projet lors de la création :
    - Ajouter un type de projet dans la boite de dialogue de création de projet. Avec en plus la possibilité de mettre ce nouveau type de projet dans une “catégorie” (comme pour java par exemple on a dans la boite de dialogue java -> annotaion, Enum, class, interface …)

    merci de m’aider je débute avec les plug ins java et pour le moment je trouve pas de solutions

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Follow

Get every new post delivered to your Inbox.

%d bloggers like this: