Aller au contenu
  1. Posts/

Maven: complétion, couleurs et notifications de bureau

Jean-Christophe Gay
Auteur
Jean-Christophe Gay

Maven, out of the box n’est pas l’outil le plus sexy du monde… Utilisé dans un IDE, il saura se faire oublié mais il mérite mieux lors de son usage en ligne de commande.

Complétion
#

Il existe des scripts de complétion automatique des commandes Maven.

Les utilisateurs de bash pourront compter sur :

  • maven-bash-completion, une représentation statique de plugins/goals/options. Celà fonctionne très bien, malheureusement il faut que chaque plugin soit décrit pour pouvoir être reconnu.
  • Un second script maintenu dans le paquet ubuntu de maven. Il fonctionne sur la même base que le précédent.

Si vous utilisez zsh, deux solutions sont disponibles :

  • le plugin mvn au sein du framework oh-my-zsh s’occupe de la complétion. En cadeau on a également tout une collection d’alias très pratique.
  • dans zsh-completions, un script permet de découvrir les goals de manière automatique à la première utilisation d’un plugin (mvn plugin:<TAB>). La première exécution est un peu plus longue mais après la complétion est instantanée (Merci à Thomas Queste qui en a parlé dans les commentaires).

Notifications de bureau
#

Avoir un build rapide c’est bien… seulement il arrive que ce ne soit pas du tout le cas. Rester devant sa console pour un build qui dure plusieurs minutes n’a pas vraiment d’intérêt… Pouvoir être notifié du résultat à la fin de son build devient alors indispensable.

maven-notifier
#

J’ai développé une extension Maven qui permet d’envoyer une notification à la fin d’un build : maven-notifier. Il fonctionne avec tous les systèmes d’exploitation.
Par défaut, l’extension tentera de trouver un notifier disponible sur la machine depuis cette liste d’outils.
Il est possible de configurer le système de notification utilisé et bien d’autres choses (format des messages, etc) en créant un fichier maven-notifier.properties.

NotifierCapture d’écran
Growl, disponible pour Windows et OS X.
maven-notifier-growl
maven-notifier-growl
Snarl, disponible pour Windows
maven-notifier-snarl
maven-notifier-snarl
terminal-notifier, OS X
notification-center
notification center OS X (depuis Mavericks)
simple-nc
notify-send pour Linux
notify-send
SystemTray depuis Java 6
system-tray
Pushbullet
maven-notifier-pushbullet
maven-notifier-pushbullet
Kdialog utilisable avec KDE
maven-notifier-kdialog
maven-notifier-kdialog
notifu disponible pour Windows
maven-notifier-notifu
maven-notifier-notifu
AnyBar pour OS X et Linux
anybar
maven-notifier-anybar
Toaster pour Windows 8
toaster
Notify since Java 6
Notify
BurntToast for Windows 10
BurntToast
Slack
Slack

Les scripts
#

On peut aussi se contenter de wrapper la commande mvn pour récupérer son statut et envoyer une notification.

Couleurs
#

La sortie console de Maven est toute terne. Il n’est pas toujours facile d’y retrouver les messages d’erreurs et c’est encore pire pour les messages d’avertissement…

maven-color
#

maven-color ajoute de la couleur dans les logs de Maven.

asciicast

Les dernières versions de Maven (depuis la version 3.1.x) utilisent SLF4J en interne, cela veut dire que l’on peut choisir l’implémentation de log que l’on veut !
Cet article très complet explique comment avoir une console en couleur avec Log4j 2 ou Logback. C’est la technique utilisée par maven-color

Pour les versions plus anciennes (entre la 3.0.x et la 3.1.0), j’ai utilisé Jansi et remplacé les loggers utilisés en interne par Maven avec un agent. Cela fonctionne avec les goals interactifs, par contre c’est beaucoup moins facile à mettre en place et bien moins résistant aux changements d’implémentation au sein de Maven et du plugin Surefire… maven-color.

Les scripts
#

On peut ajouter un peu de couleur pour y voir plus clair :

Ces scripts sont très biens et faciles à mettre en place, malheureusement ils ne fonctionnent pas avec les goals interactifs. N’espérez pas utiliser maven-release-plugin ou maven-archetype-plugin en mode interactif, les messages de demande de saisis n’apparaitront pas.

Tout en un (pour OS X)
#

Comme c’était dommage de réinstaller toutes ces extensions à la main pour chaque version de Maven, j’ai créé une formule pour brew.

brew tap jcgay/jcgay
brew install maven-deluxe

Celà installera la dernière version de Maven, maven-notifier, maven-color et maven-profiler.

Conclusion
#

Xzibit
Xzibit

Thanks Xzibit for pimping my Maven !

Articles connexes

JRebel, le redéploiement c'est à chaud !

·4 mins
Quand on développe des applications web Java EE, on passe généralement son temps à redéployer son application et redémarrer son conteneur… Heureusement on peut compter depuis un moment sur JRebel pour grandement augmenter sa productivité lors des développements en permettant le rechargement à chaud des modifications de façon plus poussé que le Hot Swap intégré à la JVM.

Commentaires archivés (7)

Discussion d'origine, conservée telle quelle. Elle est close.

Thomas COLLIGNON

Excellent article ! Ce tuning de Maven apporte vraiment un plus ! merci

J'ai essayé de paramétrer les couleurs dans mon installation Maven 3.2.2, ça fonctionne mais par contre les notifications ne fonctionnent plus dans ce cas à cause d'une erreur : Failed to initialize spy fr.jcgay.maven.notifier.NotificationEventSpyChooser: Guice provision errors:

Jean-Christophe GAY

Merci :)

Je vais essayer avec un Maven 3.2.2 (j'utilise la 3.2.5 personnellement).
Il n'y a que cette ligne dans la sortie de Maven ? Si c'était possible d'avoir la stack complète (mvn -e) dans une issue sur https://github.com/jcgay/ma..., ce serait super !

Thomas COLLIGNON

Oui 3.2.5 ça me va aussi :)

En fait je reviens de mettre mon install 3.2. from scratch et réappliquer les changements de http://www.aheritier.net/un..., et ça fonctionne ! désolé du dérangement, je ne sais pas ce que j'avais fait :(

Thomas Queste

Zsh Completion contient une complétion "intelligente" qui capture la description du plugin pour avoir la liste des goals.
Par exemple, sur 'mvn tomcat:<tab>' Zsh ira chercher les goals de ce plugin et les mettra en cache. Ca bloque pendant 2/3 secondes et après ça roule.

Lien : https://github.com/zsh-user...

Jean-Christophe GAY

Oh cool, j'en avais entendu parlé mais jamais essayé !
Je vais tester ça merci !

Thomas Queste

Pour la couleur, tu m'as oublié !
Ma fonction qui ne rajoute pas grand-chose à celles que tu as mentionnées, mais qu'elle est mieux parce que c'est la mienne :
https://github.com/tomsques...

Pour les goals interactifs, j'avais vu un bout en python qui détectait un readline (quelque chose comme ça) et qui arrêtait la colorisation. Dés que j'ai du temps, je retente (en 2020 ou un peu après...).

Jean-Christophe GAY

haaan honte sur moi, je n'étais pas tombé sur ton script magique. Je l'ajouterai :)

Je reste toujours avec maven-color perso, surtout que c'est beaucoup moins galère maintenant que Maven utilise SLF4J, plus besoin de l'agent et tout le tralala !