Merge pull request #67 from gnodet/MNG-6380

[MNG-6380] Option -Dstyle.color=always doesn't force color output
diff --git a/src/main/java/org/apache/maven/shared/utils/logging/MessageUtils.java b/src/main/java/org/apache/maven/shared/utils/logging/MessageUtils.java
index 74b85a4..8b0d9ce 100644
--- a/src/main/java/org/apache/maven/shared/utils/logging/MessageUtils.java
+++ b/src/main/java/org/apache/maven/shared/utils/logging/MessageUtils.java
@@ -21,6 +21,7 @@
 
 import org.fusesource.jansi.Ansi;
 import org.fusesource.jansi.AnsiConsole;
+import org.fusesource.jansi.AnsiMode;
 
 /**
  * Colored message utils, to manage colors consistently across plugins (only if Maven version is at least 3.5.0).
@@ -81,17 +82,13 @@
             // hook can only set when JANSI is true 
             if ( shutdownHook != null )
             {
-                // if out and system_out are same instance again, ansi is assumed to be uninstalled 
-                if ( AnsiConsole.out == AnsiConsole.system_out )
+                try
                 {
-                    try
-                    {
-                        Runtime.getRuntime().removeShutdownHook( shutdownHook );
-                    }
-                    catch ( IllegalStateException ex )
-                    {
-                        // ignore - VM is already shutting down
-                    }
+                    Runtime.getRuntime().removeShutdownHook( shutdownHook );
+                }
+                catch ( IllegalStateException ex )
+                {
+                    // ignore - VM is already shutting down
                 }
             }
         }
@@ -113,7 +110,19 @@
     {
         if ( JANSI )
         {
+            AnsiConsole.out().setMode( flag ? AnsiMode.Force : AnsiMode.Strip );
             Ansi.setEnabled( flag );
+            System.setProperty( AnsiConsole.JANSI_MODE,
+                    flag ? AnsiConsole.JANSI_MODE_FORCE : AnsiConsole.JANSI_MODE_STRIP );
+            boolean installed = AnsiConsole.isInstalled();
+            while ( AnsiConsole.isInstalled() )
+            {
+                AnsiConsole.systemUninstall();
+            }
+            if ( installed )
+            {
+                AnsiConsole.systemInstall();
+            }
         }
     }
 
@@ -194,7 +203,10 @@
                 {
                     synchronized ( STARTUP_SHUTDOWN_MONITOR )
                     {
-                        doSystemUninstall();
+                        while ( AnsiConsole.isInstalled() )
+                        {
+                            doSystemUninstall();
+                        }
                     }
                 }
             };