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.
Notifier | Capture d’écran |
---|---|
Growl, disponible pour Windows et OS X. | |
Snarl, disponible pour Windows | |
terminal-notifier, OS X | |
notification center OS X (depuis Mavericks) | |
notify-send pour Linux | |
SystemTray depuis Java 6 | |
Pushbullet | |
Kdialog utilisable avec KDE | |
notifu disponible pour Windows | |
AnyBar pour OS X et Linux | |
Toaster pour Windows 8 | |
Notify since Java 6 | |
BurntToast for Windows 10 | |
Slack |
Les scripts
On peut aussi se contenter de wrapper la commande mvn
pour récupérer son statut et envoyer une notification.
- Growl via growlnotify : Intégration de Growl avec Maven, maven-growl
- notification center via terminal-notifier : maven-notification-center
- notify-send : Intégration de notify-send avec Maven.
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.
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
Thanks Xzibit for pimping my Maven !