<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Notification Center on Jean-Christophe Gay</title><link>https://jeanchristophegay.com/tags/notification-center/</link><description>Recent content in Notification Center on Jean-Christophe Gay</description><generator>Hugo -- gohugo.io</generator><language>fr-FR</language><copyright>© 2026 Jean-Christophe Gay</copyright><lastBuildDate>Sun, 22 Sep 2019 00:02:45 +0200</lastBuildDate><atom:link href="https://jeanchristophegay.com/tags/notification-center/index.xml" rel="self" type="application/rss+xml"/><item><title>Notifications de bureau pour Gradle</title><link>https://jeanchristophegay.com/posts/gradle-desktop-notification/</link><pubDate>Wed, 13 May 2015 17:35:00 +0200</pubDate><guid>https://jeanchristophegay.com/posts/gradle-desktop-notification/</guid><description>&lt;p&gt;Comme (trop ?) souvent avec les builds, le temps parait long&amp;hellip; Souvent lancé un peu en tâche de fond, j&amp;rsquo;aime bien avoir une notification quand ceux ci se terminent.&lt;br&gt;
Gradle propose un plugin par défaut pour enrichir son build de notifications mais on verra comment avoir accès à une panoplie de nouveaux types de notifications !&lt;/p&gt;

&lt;h1 class="relative group"&gt;Gradle Build Announcements
 &lt;div id="gradle-build-announcements" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#gradle-build-announcements" aria-label="Ancre"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h1&gt;
&lt;p&gt;C&amp;rsquo;est le &lt;a href="https://gradle.org/docs/current/userguide/build_announcements_plugin.html" target="_blank" rel="noreferrer"&gt;plugin&lt;/a&gt; disponible par défaut dans la distribution de Gradle. Il est lui même basé sur le plugin &lt;a href="https://gradle.org/docs/current/userguide/announce_plugin.html" target="_blank" rel="noreferrer"&gt;Announce&lt;/a&gt; qui permet d&amp;rsquo;envoyer des notifications personnalisées pendant un build.&lt;br&gt;
Il supporte 4 types de notifications :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;twitter&lt;/li&gt;
&lt;li&gt;notify-send&lt;/li&gt;
&lt;li&gt;Snarl&lt;/li&gt;
&lt;li&gt;Growl&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt="growl.success"
 src="https://jeanchristophegay.com/images/gradle.announce.growl.success.thumbnail.png"
 &gt;&lt;/figure&gt;

&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt="growl.failure"
 src="https://jeanchristophegay.com/images/gradle.announce.growl.failure.png"
 &gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Pour l&amp;rsquo;activer, c&amp;rsquo;est très simple il suffit de le déclarer dans &lt;code&gt;build.gradle&lt;/code&gt; :&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;apply plugin: 'build-announcements'
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ou de le déclarer directement dans &lt;code&gt;$HOME/.gradle/init.gradle&lt;/code&gt; pour que le plugin soit actif pour tous les projets :&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;rootProject {
 apply plugin: 'build-announcements'
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;C&amp;rsquo;est vraiment très sympa d&amp;rsquo;avoir cette fonctionnalité disponible directement sans rien installer&amp;hellip; Par contre le choix d&amp;rsquo;applications est assez limité et les notifications ne sont pas très visuelles (l&amp;rsquo;icône est toujours la même quelque soit l&amp;rsquo;état du build par exemple).&lt;/p&gt;

&lt;h1 class="relative group"&gt;Gradle notifier
 &lt;div id="gradle-notifier" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#gradle-notifier" aria-label="Ancre"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h1&gt;
&lt;p&gt;Comme j&amp;rsquo;avais déjà mes notifications pour Maven avec &lt;a href="https://github.com/jcgay/maven-notifier" target="_blank" rel="noreferrer"&gt;maven-notifier&lt;/a&gt;, j&amp;rsquo;en ai profité pour les porter vers Gradle avec &lt;a href="https://github.com/jcgay/gradle-notifier" target="_blank" rel="noreferrer"&gt;gradle-notifier&lt;/a&gt; !&lt;/p&gt;
&lt;p&gt;Il supporte l&amp;rsquo;envoi de notifications vers :&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th style="text-align: center"&gt;Notifier&lt;/th&gt;
					&lt;th&gt;Screenshot&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td style="text-align: center"&gt;&lt;strong&gt;Growl&lt;/strong&gt;, pour &lt;a href="http://www.growlforwindows.com/gfw/" target="_blank" rel="noreferrer"&gt;Windows&lt;/a&gt; et &lt;a href="http://growl.info/" target="_blank" rel="noreferrer"&gt;OS X&lt;/a&gt;.&lt;/td&gt;
					&lt;td&gt;&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt="Growl"
 src="https://jeanchristophegay.com/images/gradle.notifier.growl.thumbnail.png"
 &gt;&lt;/figure&gt;
&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: center"&gt;&lt;strong&gt;&lt;a href="http://snarl.fullphat.net/" target="_blank" rel="noreferrer"&gt;Snarl&lt;/a&gt;&lt;/strong&gt;, pour Windows&lt;/td&gt;
					&lt;td&gt;&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt="Snarl"
 src="https://jeanchristophegay.com/images/gradle.notifier.snarl.png"
 &gt;&lt;/figure&gt;
&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: center"&gt;&lt;strong&gt;&lt;a href="https://github.com/alloy/terminal-notifier" target="_blank" rel="noreferrer"&gt;terminal-notifier&lt;/a&gt;&lt;/strong&gt;, OS X&lt;/td&gt;
					&lt;td&gt;&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt="terminal-notifier"
 src="https://jeanchristophegay.com/images/gradle.notifier.notificationcenter.thumbnail.png"
 &gt;&lt;/figure&gt;
&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: center"&gt;&lt;strong&gt;notification center&lt;/strong&gt; OS X (depuis Mavericks)&lt;/td&gt;
					&lt;td&gt;&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt="notification-center"
 src="https://jeanchristophegay.com/images/notifier.simplenc.thumbnail.png"
 &gt;&lt;/figure&gt;
&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: center"&gt;&lt;strong&gt;notify-send&lt;/strong&gt; pour Linux&lt;/td&gt;
					&lt;td&gt;&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt="notify-send"
 src="https://jeanchristophegay.com/images/gradle.notifier.notifysend.png"
 &gt;&lt;/figure&gt;
&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: center"&gt;&lt;strong&gt;SystemTray&lt;/strong&gt; depuis Java 6&lt;/td&gt;
					&lt;td&gt;&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt="System Tray"
 src="https://jeanchristophegay.com/images/notifier.system.tray_.success.png"
 &gt;&lt;/figure&gt;
&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: center"&gt;&lt;strong&gt;&lt;a href="https://www.pushbullet.com/" target="_blank" rel="noreferrer"&gt;Pushbullet&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt="pushbullet"
 src="https://jeanchristophegay.com/images/gradle.notifier.pushbullet.thumbnail.png"
 &gt;&lt;/figure&gt;
&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: center"&gt;&lt;strong&gt;Kdialog&lt;/strong&gt; pour KDE&lt;/td&gt;
					&lt;td&gt;&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt="Kdialog"
 src="https://jeanchristophegay.com/images/gradle.notifier.kdialog.png"
 &gt;&lt;/figure&gt;
&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: center"&gt;&lt;strong&gt;&lt;a href="http://www.paralint.com/projects/notifu/index.html" target="_blank" rel="noreferrer"&gt;notifu&lt;/a&gt;&lt;/strong&gt; for Windows&lt;/td&gt;
					&lt;td&gt;&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt="notifu"
 src="https://jeanchristophegay.com/images/gradle.notifier.notifu.png"
 &gt;&lt;/figure&gt;
&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: center"&gt;&lt;strong&gt;AnyBar&lt;/strong&gt; pour &lt;a href="https://github.com/tonsky/AnyBar" target="_blank" rel="noreferrer"&gt;OS X&lt;/a&gt; et &lt;a href="https://github.com/limpbrains/somebar" target="_blank" rel="noreferrer"&gt;Linux&lt;/a&gt;&lt;/td&gt;
					&lt;td&gt;&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt="anybar"
 src="https://jeanchristophegay.com/images/gradle.notifier.anybar.thumbnail.png"
 &gt;&lt;/figure&gt;
&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: center"&gt;&lt;strong&gt;&lt;a href="https://github.com/nels-o/toaster" target="_blank" rel="noreferrer"&gt;Toaster&lt;/a&gt;&lt;/strong&gt; pour Windows 8&lt;/td&gt;
					&lt;td&gt;&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt="Toaster"
 src="https://jeanchristophegay.com/images/gradle.notifier.toaster.png"
 &gt;&lt;/figure&gt;
&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: center"&gt;&lt;strong&gt;&lt;a href="https://github.com/dorkbox/Notify" target="_blank" rel="noreferrer"&gt;Notify&lt;/a&gt;&lt;/strong&gt; since Java 6&lt;/td&gt;
					&lt;td&gt;&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt="Notify"
 src="https://jeanchristophegay.com/images/notifier.notify.png"
 &gt;&lt;/figure&gt;
&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: center"&gt;&lt;strong&gt;&lt;a href="https://github.com/Windos/BurntToast" target="_blank" rel="noreferrer"&gt;BurntToast&lt;/a&gt;&lt;/strong&gt; for Windows 10&lt;/td&gt;
					&lt;td&gt;&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt="BurntToast"
 src="https://jeanchristophegay.com/images/notifier.burnttoast.png"
 &gt;&lt;/figure&gt;
&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: center"&gt;&lt;strong&gt;&lt;a href="https://slack.com" target="_blank" rel="noreferrer"&gt;Slack&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt="Slack"
 src="https://jeanchristophegay.com/images/slack-success.png"
 &gt;&lt;/figure&gt;
&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 class="relative group"&gt;Installation
 &lt;div id="installation" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#installation" aria-label="Ancre"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;Le plugin peut être ajouté dans la &lt;a href="http://gradle.org/docs/current/userguide/init_scripts.html" target="_blank" rel="noreferrer"&gt;phase d&amp;rsquo;initialisation&lt;/a&gt; ou directement au sein d&amp;rsquo;un &lt;a href="https://gradle.org/docs/current/userguide/plugins.html" target="_blank" rel="noreferrer"&gt;projet&lt;/a&gt;.&lt;/p&gt;

&lt;h3 class="relative group"&gt;Script d&amp;rsquo;initialisation
 &lt;div id="script-dinitialisation" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#script-dinitialisation" aria-label="Ancre"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;Pa exemple, créer (ou modifier) le fichier &lt;code&gt;$HOME/.gradle/init.gradle&lt;/code&gt; :&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;initscript {
 repositories {
 mavenCentral()
 }

 dependencies {
 classpath group: 'fr.jcgay', name: 'gradle-notifier', version: '1.1.0'
 }
}

rootProject {
 apply plugin: fr.jcgay.gradle.notifier.GradleNotifierPlugin
}
&lt;/code&gt;&lt;/pre&gt;

&lt;h3 class="relative group"&gt;Script du projet
 &lt;div id="script-du-projet" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#script-du-projet" aria-label="Ancre"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;Dans le script &lt;code&gt;build.gradle&lt;/code&gt;, ajouter :&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;buildscript {
 repositories {
 mavenCentral()
 }
 
 dependencies {
 classpath group: 'fr.jcgay', name: 'gradle-notifier', version: '1.1.0'
 }
}

apply plugin: 'fr.jcgay.gradle-notifier'
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ou en utilisant le mécanisme de plugin introduit depuis Gradle 2.1:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;plugins {
 id &amp;quot;fr.jcgay.gradle-notifier&amp;quot; version &amp;quot;1.1.0&amp;quot;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;h3 class="relative group"&gt;Configuration
 &lt;div id="configuration" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#configuration" aria-label="Ancre"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;Reposant sur &lt;a href="https://github.com/jcgay/send-notification" target="_blank" rel="noreferrer"&gt;send-notification&lt;/a&gt;, la configuration des applications et le choix de celle utilisée pour recevoir les notifications peut se faire dans le fichier &lt;code&gt;$HOME/.send-notification&lt;/code&gt; (Voir les paramètres disponibles dans la &lt;a href="https://github.com/jcgay/send-notification/wiki" target="_blank" rel="noreferrer"&gt;documentation&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Ou bien l&amp;rsquo;outil est configurable directement au sein d&amp;rsquo;un script Gradle :&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;notifier {
 implementation = 'notificationcenter'
 threshold {
 time = 10
 unit = java.util.concurrent.TimeUnit.SECONDS
 }
 growl {
 port = 23053
 host = 'localhost'
 password = 'azerty123'
 }
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Et voilà plus moyen d&amp;rsquo;oublier son build au fin fond d&amp;rsquo;une console !&lt;/p&gt;</description></item><item><title>Maven: complétion, couleurs et notifications de bureau</title><link>https://jeanchristophegay.com/posts/maven-completion-couleurs-et-notifications/</link><pubDate>Sun, 14 Apr 2013 14:02:00 +0200</pubDate><guid>https://jeanchristophegay.com/posts/maven-completion-couleurs-et-notifications/</guid><description>&lt;p&gt;Maven, out of the box n’est pas l’outil le plus sexy du monde&amp;hellip; Utilisé dans un IDE, il saura se faire oublié mais il mérite mieux lors de son usage en ligne de commande.&lt;/p&gt;

&lt;h1 class="relative group"&gt;Complétion
 &lt;div id="complétion" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#compl%c3%a9tion" aria-label="Ancre"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h1&gt;
&lt;p&gt;Il existe des scripts de complétion automatique des commandes Maven.&lt;/p&gt;
&lt;p&gt;Les utilisateurs de bash pourront compter sur :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/juven/maven-bash-completion" target="_blank" rel="noreferrer"&gt;maven-bash-completion&lt;/a&gt;, 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.&lt;/li&gt;
&lt;li&gt;Un second script maintenu dans le &lt;a href="http://packages.ubuntu.com/quantal/maven" target="_blank" rel="noreferrer"&gt;paquet ubuntu&lt;/a&gt; de maven. Il fonctionne sur la même base que le précédent.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si vous utilisez zsh, deux solutions sont disponibles :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;le plugin &lt;code&gt;mvn&lt;/code&gt; au sein du framework &lt;a href="https://github.com/robbyrussell/oh-my-zsh" target="_blank" rel="noreferrer"&gt;oh-my-zsh&lt;/a&gt; s’occupe de la complétion. En cadeau on a également tout une collection d&amp;rsquo;alias très pratique.&lt;/li&gt;
&lt;li&gt;dans &lt;a href="https://github.com/zsh-users/zsh-completions" target="_blank" rel="noreferrer"&gt;zsh-completions&lt;/a&gt;, un script permet de découvrir les goals de manière automatique à la première utilisation d&amp;rsquo;un plugin (&lt;code&gt;mvn plugin:&amp;lt;TAB&amp;gt;&lt;/code&gt;). La première exécution est un peu plus longue mais après la complétion est instantanée (Merci à &lt;a href="http://www.tomsquest.com" target="_blank" rel="noreferrer"&gt;Thomas Queste&lt;/a&gt; qui en a parlé dans les commentaires).&lt;/li&gt;
&lt;/ul&gt;

&lt;h1 class="relative group"&gt;Notifications de bureau
 &lt;div id="notifications-de-bureau" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#notifications-de-bureau" aria-label="Ancre"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h1&gt;
&lt;p&gt;Avoir un build rapide c’est bien&amp;hellip; 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&amp;hellip; Pouvoir être notifié du résultat à la fin de son build devient alors indispensable.&lt;/p&gt;

&lt;h2 class="relative group"&gt;maven-notifier
 &lt;div id="maven-notifier" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#maven-notifier" aria-label="Ancre"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;J’ai développé une extension Maven qui permet d’envoyer une notification à la fin d’un build : &lt;a href="https://github.com/jcgay/maven-notifier" target="_blank" rel="noreferrer"&gt;maven-notifier&lt;/a&gt;. Il fonctionne avec tous les systèmes d&amp;rsquo;exploitation.&lt;br&gt;
Par défaut, l&amp;rsquo;extension tentera de trouver un notifier disponible sur la machine depuis cette &lt;a href="https://github.com/jcgay/maven-notifier/wiki#default-notifiers" target="_blank" rel="noreferrer"&gt;liste d&amp;rsquo;outils&lt;/a&gt;.&lt;br&gt;
Il est possible de configurer le système de notification utilisé et bien d&amp;rsquo;autres choses (format des messages, etc) en créant un fichier &lt;a href="https://github.com/jcgay/maven-notifier/wiki#configuration" target="_blank" rel="noreferrer"&gt;maven-notifier.properties&lt;/a&gt;.&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th style="text-align: center"&gt;Notifier&lt;/th&gt;
					&lt;th&gt;Capture d&amp;rsquo;écran&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td style="text-align: center"&gt;&lt;strong&gt;Growl&lt;/strong&gt;, disponible pour &lt;a href="http://www.growlforwindows.com/gfw/" target="_blank" rel="noreferrer"&gt;Windows&lt;/a&gt; et &lt;a href="http://growl.info/" target="_blank" rel="noreferrer"&gt;OS X&lt;/a&gt;.&lt;/td&gt;
					&lt;td&gt;&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt="maven-notifier-growl"
 src="https://jeanchristophegay.com/images/maven-notifier-growl.png"
 &gt;&lt;figcaption&gt;maven-notifier-growl&lt;/figcaption&gt;&lt;/figure&gt;
&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: center"&gt;&lt;strong&gt;&lt;a href="http://snarl.fullphat.net/" target="_blank" rel="noreferrer"&gt;Snarl&lt;/a&gt;&lt;/strong&gt;, disponible pour Windows&lt;/td&gt;
					&lt;td&gt;&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt="maven-notifier-snarl"
 src="https://jeanchristophegay.com/images/notifier.snarl.success.png"
 &gt;&lt;figcaption&gt;maven-notifier-snarl&lt;/figcaption&gt;&lt;/figure&gt;
&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: center"&gt;&lt;strong&gt;&lt;a href="https://github.com/alloy/terminal-notifier" target="_blank" rel="noreferrer"&gt;terminal-notifier&lt;/a&gt;&lt;/strong&gt;, OS X&lt;/td&gt;
					&lt;td&gt;&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt="notification-center"
 src="https://jeanchristophegay.com/images/notifier.notification-center.success.png"
 &gt;&lt;/figure&gt;
&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: center"&gt;&lt;strong&gt;notification center&lt;/strong&gt; OS X (depuis Mavericks)&lt;/td&gt;
					&lt;td&gt;&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt="simple-nc"
 src="https://jeanchristophegay.com/images/notifier.simplenc.thumbnail.png"
 &gt;&lt;/figure&gt;
&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: center"&gt;&lt;strong&gt;notify-send&lt;/strong&gt; pour Linux&lt;/td&gt;
					&lt;td&gt;&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt="notify-send"
 src="https://jeanchristophegay.com/images/notifier.notify-send.error_.fail_.png"
 &gt;&lt;/figure&gt;
&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: center"&gt;&lt;strong&gt;SystemTray&lt;/strong&gt; depuis Java 6&lt;/td&gt;
					&lt;td&gt;&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt="system-tray"
 src="https://jeanchristophegay.com/images/notifier.system.tray_.fail_.png"
 &gt;&lt;/figure&gt;
&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: center"&gt;&lt;strong&gt;&lt;a href="https://www.pushbullet.com/" target="_blank" rel="noreferrer"&gt;Pushbullet&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt="maven-notifier-pushbullet"
 src="https://jeanchristophegay.com/images/notifier.pushbullet.success.png"
 &gt;&lt;figcaption&gt;maven-notifier-pushbullet&lt;/figcaption&gt;&lt;/figure&gt;
&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: center"&gt;&lt;strong&gt;Kdialog&lt;/strong&gt; utilisable avec KDE&lt;/td&gt;
					&lt;td&gt;&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt="maven-notifier-kdialog"
 src="https://jeanchristophegay.com/images/notifier.kdialog.success.png"
 &gt;&lt;figcaption&gt;maven-notifier-kdialog&lt;/figcaption&gt;&lt;/figure&gt;
&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: center"&gt;&lt;strong&gt;&lt;a href="http://www.paralint.com/projects/notifu/index.html" target="_blank" rel="noreferrer"&gt;notifu&lt;/a&gt;&lt;/strong&gt; disponible pour Windows&lt;/td&gt;
					&lt;td&gt;&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt="maven-notifier-notifu"
 src="https://jeanchristophegay.com/images/notifier.notifu.success.png"
 &gt;&lt;figcaption&gt;maven-notifier-notifu&lt;/figcaption&gt;&lt;/figure&gt;
&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: center"&gt;&lt;strong&gt;AnyBar&lt;/strong&gt; pour &lt;a href="https://github.com/tonsky/AnyBar" target="_blank" rel="noreferrer"&gt;OS X&lt;/a&gt; et &lt;a href="https://github.com/limpbrains/somebar" target="_blank" rel="noreferrer"&gt;Linux&lt;/a&gt;&lt;/td&gt;
					&lt;td&gt;&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt="anybar"
 src="https://jeanchristophegay.com/images/notifier.anybar_maven.png"
 &gt;&lt;figcaption&gt;maven-notifier-anybar&lt;/figcaption&gt;&lt;/figure&gt;
&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: center"&gt;&lt;strong&gt;&lt;a href="https://github.com/nels-o/toaster" target="_blank" rel="noreferrer"&gt;Toaster&lt;/a&gt;&lt;/strong&gt; pour Windows 8&lt;/td&gt;
					&lt;td&gt;&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt="toaster"
 src="https://jeanchristophegay.com/images/notifier.toaster.failure.png"
 &gt;&lt;/figure&gt;
&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: center"&gt;&lt;strong&gt;&lt;a href="https://github.com/dorkbox/Notify" target="_blank" rel="noreferrer"&gt;Notify&lt;/a&gt;&lt;/strong&gt; since Java 6&lt;/td&gt;
					&lt;td&gt;&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt="Notify"
 src="https://jeanchristophegay.com/images/notifier.notify.png"
 &gt;&lt;/figure&gt;
&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: center"&gt;&lt;strong&gt;&lt;a href="https://github.com/Windos/BurntToast" target="_blank" rel="noreferrer"&gt;BurntToast&lt;/a&gt;&lt;/strong&gt; for Windows 10&lt;/td&gt;
					&lt;td&gt;&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt="BurntToast"
 src="https://jeanchristophegay.com/images/notifier.burnttoast.png"
 &gt;&lt;/figure&gt;
&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: center"&gt;&lt;strong&gt;&lt;a href="https://slack.com" target="_blank" rel="noreferrer"&gt;Slack&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt="Slack"
 src="https://jeanchristophegay.com/images/slack-success.png"
 &gt;&lt;/figure&gt;
&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 class="relative group"&gt;Les scripts
 &lt;div id="les-scripts" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#les-scripts" aria-label="Ancre"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;On peut aussi se contenter de wrapper la commande &lt;code&gt;mvn&lt;/code&gt; pour récupérer son statut et envoyer une notification.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Growl via &lt;a href="http://growl.info/extras.php#growlnotify" target="_blank" rel="noreferrer"&gt;growlnotify&lt;/a&gt; : &lt;a href="http://blank.jasonwhaley.com/2009/02/growl-maven-integration.html" target="_blank" rel="noreferrer"&gt;Intégration de Growl avec Maven&lt;/a&gt;, &lt;a href="https://github.com/geoffreywiseman/maven-growl" target="_blank" rel="noreferrer"&gt;maven-growl&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;notification center via &lt;a href="https://github.com/alloy/terminal-notifier" target="_blank" rel="noreferrer"&gt;terminal-notifier&lt;/a&gt; : &lt;a href="https://github.com/geoffreywiseman/maven-notification-center" target="_blank" rel="noreferrer"&gt;maven-notification-center&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;notify-send : &lt;a href="http://blog.progs.be/467/notification-maven-build-finishe" target="_blank" rel="noreferrer"&gt;Intégration de notify-send avec Maven.&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1 class="relative group"&gt;Couleurs
 &lt;div id="couleurs" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#couleurs" aria-label="Ancre"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h1&gt;
&lt;p&gt;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&amp;hellip;&lt;/p&gt;

&lt;h2 class="relative group"&gt;maven-color
 &lt;div id="maven-color" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#maven-color" aria-label="Ancre"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://github.com/jcgay/maven-color" target="_blank" rel="noreferrer"&gt;maven-color&lt;/a&gt; ajoute de la couleur dans les logs de Maven.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://asciinema.org/a/20053?autoplay=1" target="_blank" rel="noreferrer"&gt;&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt="asciicast"
 src="https://asciinema.org/a/20053.svg"
 &gt;&lt;/figure&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Les dernières versions de Maven (depuis la version 3.1.x) utilisent &lt;a href="http://www.slf4j.org/" target="_blank" rel="noreferrer"&gt;SLF4J&lt;/a&gt; en interne, cela veut dire que l&amp;rsquo;on peut choisir l&amp;rsquo;implémentation de log que l&amp;rsquo;on veut !&lt;br&gt;
&lt;a href="http://aheritier.net/united-colors-of-maven/" target="_blank" rel="noreferrer"&gt;Cet article&lt;/a&gt; très complet explique comment avoir une console en couleur avec &lt;a href="http://logging.apache.org/log4j/2.x/" target="_blank" rel="noreferrer"&gt;Log4j 2&lt;/a&gt; ou &lt;a href="http://logback.qos.ch/" target="_blank" rel="noreferrer"&gt;Logback&lt;/a&gt;. C&amp;rsquo;est la technique utilisée par &lt;a href="https://github.com/jcgay/maven-color#maven--31x" target="_blank" rel="noreferrer"&gt;maven-color&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Pour les versions plus anciennes (entre la 3.0.x et la 3.1.0), j’ai utilisé &lt;a href="http://jansi.fusesource.org/" target="_blank" rel="noreferrer"&gt;Jansi&lt;/a&gt; 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&amp;hellip; &lt;a href="https://github.com/jcgay/maven-color#maven-30x" target="_blank" rel="noreferrer"&gt;maven-color&lt;/a&gt;.&lt;/p&gt;

&lt;h2 class="relative group"&gt;Les scripts
 &lt;div id="les-scripts-1" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#les-scripts-1" aria-label="Ancre"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;On peut ajouter un peu de couleur pour y voir plus clair :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/tomsquest/dotfiles/blob/master/zsh/functions/mvn-in-colors.zsh" target="_blank" rel="noreferrer"&gt;mvn-in-colors&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ccouturi/mvnc" target="_blank" rel="noreferrer"&gt;mvnc&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/builddoctor/maven-antsy-color" target="_blank" rel="noreferrer"&gt;maven-antsy-color&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;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 &lt;code&gt;maven-release-plugin&lt;/code&gt; ou &lt;code&gt;maven-archetype-plugin&lt;/code&gt; en mode interactif, les messages de demande de saisis n’apparaitront pas.&lt;/p&gt;

&lt;h1 class="relative group"&gt;Tout en un (pour OS X)
 &lt;div id="tout-en-un-pour-os-x" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#tout-en-un-pour-os-x" aria-label="Ancre"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h1&gt;
&lt;p&gt;Comme c&amp;rsquo;était dommage de réinstaller toutes ces extensions à la main pour chaque version de Maven, j&amp;rsquo;ai créé une formule pour &lt;code&gt;brew&lt;/code&gt;.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;brew tap jcgay/jcgay
brew install maven-deluxe
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Celà installera la dernière version de Maven, &lt;a href="https://github.com/jcgay/maven-notifier" target="_blank" rel="noreferrer"&gt;maven-notifier&lt;/a&gt;, &lt;a href="https://github.com/jcgay/maven-color" target="_blank" rel="noreferrer"&gt;maven-color&lt;/a&gt; et &lt;a href="https://github.com/jcgay/maven-profiler" target="_blank" rel="noreferrer"&gt;maven-profiler&lt;/a&gt;.&lt;/p&gt;

&lt;h1 class="relative group"&gt;Conclusion
 &lt;div id="conclusion" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#conclusion" aria-label="Ancre"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h1&gt;
&lt;p&gt;&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt="Xzibit"
 src="https://jeanchristophegay.com/images/pimpmyride.jpg"
 &gt;&lt;figcaption&gt;Xzibit&lt;/figcaption&gt;&lt;/figure&gt;
&lt;br&gt;
Thanks Xzibit for pimping my Maven !&lt;/p&gt;</description></item></channel></rss>