Pour ne plus être pollué par le contenu des répertoires target/ de Maven (contenant notamment les classes compilées) lorsque l’on travaille sous Eclipse, il suffit de les marquer en derived.

Ceci permet d’indiquer à Eclipse que le contenu de ce répertoire ne doit pas être pris en compte lors des recherches, lors des mécanismes de navigation type “Open Type” (CTRL+T), etc.

C’est un vrai gain de temps sur de gros projets (sans compter que le résultat des recherches est dès lors plus clair).

Deux solutions sont possibles :

  • jouer sur la configuration Maven
  • utiliser un plugin Eclipse (voir un prochain billet à ce sujet)

Configuration manuelle sous Eclipse

En finir avec les répertoires 'target/' de Maven /media/screenshots/screenshot-eclipse-derived-property-screenshot.png

Cette manipulation n’est aujourd’hui pas nativement automatisable depuis Maven (même si d’antédiluviens bugs y font référence). Le problème étant dès lors qu’à chaque fois qu’une opération clean est effectuée côté Maven, le répertoire est effacé, et Eclipse perd l’état derived, qu’il faut donc réappliquer.

Configuration maven

Une solution pour s’en sortir est de paramétrer Maven, côté pom.xml, pour qu’il n’efface plus le répertoire target/, mais uniquement son contenu.

Pour ce faire il suffit de mettre à jour la configuration du plugin maven-clean-plugin.

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-clean-plugin</artifactId>
  <version>2.4.1</version>
  <configuration>
    <excludeDefaultDirectories>true</excludeDefaultDirectories>
      <filesets>
        <fileset>
          <directory>target</directory>
          <includes>
            <include>**/*</include>
          </includes>
        </fileset>
      </filesets>
  </configuration>
</plugin>

Le résultat est visible dans la log de Maven :

[INFO] ------------------------------------------------------------------------
[INFO] Building sonos-root 
[INFO] task-segment: [clean] 
[INFO] ------------------------------------------------------------------------ 
[INFO] [clean:clean {execution: default-clean}] 
[INFO] Deleting /home/users/sergio/Java/workspaces/eclipse/perso-java/sonos-root/target (includes = [**/*], excludes = []) 
[INFO] [cobertura:clean {execution: clean}] 
[INFO] ------------------------------------------------------------------------

Cette paramétrie gagne bien sûr à être mutualisée à travers différents projets en la définissant dans pom parent root.