Subversion : Exclure en masse les fichiers et répertoires générés d’un projet Maven

Une chose ennuyeuse lorsque l’on démarre un nouveau projet Maven avec différents sous-modules et que l’on veut en gérer les versions dans Subversion c’est qu’il faut pour chaque module configurer la propriété svn:ignore afin de lui dire de ne jamais publier sur le serveur les fichiers ou répertoires que l’on ne veut pas partager avec le reste de l’équipe.
Le gros avantage de Maven ce sont ses conventions et en particulier sur l’organisation des répertoires (sans cela autant faire du script).
La force des OS Unix-like (Linux, Macos, …) c’est la panoplie d’outils super-puissants en ligne de commande.

Tirons parti de ces derniers pour faire cela en moins de 10 secondes.
Il suffit de créer à la racine du projet un ficher module.svn-ignore dans lequel on va lister les fichiers ou répertoires à ignorer :

.settings
.project
.classpath
.idea
*.iml
*.ipr
*.iws
bin
target

Et ensuite de lancer la commande :

find . -name pom.xml -exec dirname {} \; | xargs svn ps svn:ignore -F module.svn-ignore

Il ne vous reste plus qu’à publier (commit) vos changements sur le serveur subversion et le tour est joué.

Plus de détails ?
Dans le fichier d’exclusions je choisis de mettre

  • le répertoire target de maven,
  • le répertoire bin souvent (toujours ?) utilisé par m2eclipse
  • le répertoire .settings et les fichiers .project , .classpath pour les utilisateurs d’eclipse.
  • le répertoire .idea et les fichiers *.iml, *.iws, *.ipr pour les utilisateurs d’IntelliJ Idea

Le script recherche ensuite tous les descripteurs de projets (pom.xml) et applique l’exclusion au répertoire dans lequel il se trouve.
PS : Pour les malheureux contraints à développer sous windows, vous pouvez installer cygwin pour avoir un environnement shell potable.
MAJ 27 Mars 2010 : Ajout de l’exclusion des fichiers *.iws de IntelliJ Idea (cf. commentaire de Gregory Boissinot)

6 thoughts on “Subversion : Exclure en masse les fichiers et répertoires générés d’un projet Maven”

  1. Y’a moyen d’adapter le script pour qu’il delete les repsertoires qui sont deja sous SVN ?
    (oui je sais, ils devraient pas y etre, mais qd meme, ca arrive des fois)
    🙂

  2. En gros tu as copié comme un *** des copies locales d’un autre projet et tu veux retirer tous les répertoires .svn ??
    Primo tu devrais utiliser un export svn pour récupérer le contenu de ton projet actuel sans les .svn

    export: Create an unversioned copy of a tree.
    usage: 1. export [-r REV] URL[@PEGREV] [PATH]
    2. export [-r REV] PATH1[@PEGREV] [PATH2]

    Mais bon si la bétise est déjà faite :

    find . -name .svn -exec rm -rf {} \;

    Voilà !

  3. Salut Arnaud,

    Comme je te le signalais hier soir au JUG Geneva, NetBeans a vraiment énormément progressé avec son intégration Maven et notamment, il exclue d’office ces fichiers SVN pour toi. Je ne peux que vivement te conseiller de tester la version 6.8 (ou 6.9 prelease). L’intégration de Maven est magnifique: l’IDE s’appuie totalement sur les POMs et ne génère rien de propriétaire à côté.

    Franchement le gap entre Eclipse et NetBeans s’est vraiment resseré et en faveur de ce dernier (tu peux même utiliser les raccourcis clavier d’Eclipse): j’aurai de la peine à devoir réutiliser Eclipse maintenant. Tout me semble plus naturel et moins alambiqué sur NetBeans. A tester absolument (surtout sur Mac 😉 )

  4. Salut Jean-Marc,

    Je vais retester NetBeans. Pour moi IntelliJ et NetBeans offrent aujourd’hui certes moins de fonctionnalités que m2eclipse mais ils sont plus stables. De plus tous les deux ont une approche indexation/cache qui fait qu’ils moulinent quand ils démarrent ou quand on ne les utilise pas, contrairement à eclipse qui a toujours la mauvaise idée de prendre la main quand on veut faire quelquechose.

Comments are closed.