[
https://issues.apache.org/jira/browse/MNG-7161?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17386949#comment-17386949
]
Michael Osipov commented on MNG-7161:
-------------------------------------
Thank you, yes done.
> Error thrown during uninstalling of JAnsi
> -----------------------------------------
>
> Key: MNG-7161
> URL: https://issues.apache.org/jira/browse/MNG-7161
> Project: Maven
> Issue Type: Bug
> Affects Versions: 3.8.2, 4.0.0, 4.0.0-alpha-1
> Reporter: Guy Brand
> Assignee: Michael Osipov
> Priority: Critical
> Fix For: 3.8.2, 4.0.0, 4.0.0-alpha-1
>
>
> Our integration tests stopped working after we started to test with a Maven
> {{4.0.0-alpha-1}} nightly which included this commit:
> [https://github.com/apache/maven/commit/195fb626a9a4e5a0774f779b6d8da1cb9ef38468#diff-9c5fb3d1b7e3b0f54bc5c4182965c4fe1f9023d449017cece3005d3f90e8e4d8R310-R317]
> In this commit the {{maven-shared-utils}} and the {{jansi}} dependencies are
> being upgraded. When we then run our integration tests we get the following
> null pointer exception:
> {code:java}
> java.lang.NullPointerException
> at org.fusesource.jansi.AnsiPrintStream.uninstall(AnsiPrintStream.java:79)
> at org.fusesource.jansi.AnsiConsole.systemUninstall(AnsiConsole.java:524)
> at
> org.apache.maven.shared.utils.logging.MessageUtils.doSystemUninstall(MessageUtils.java:101)
> at
> org.apache.maven.shared.utils.logging.MessageUtils.systemUninstall(MessageUtils.java:80)
> at org.apache.maven.cli.MavenCli.main(MavenCli.java:203)
> at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native
> Method)
> at
> java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> at
> java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> at java.base/java.lang.reflect.Method.invoke(Method.java:566)
> at
> org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:282)
> at
> org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:225)
> at
> org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:406)
> at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:347)
> {code}
>
> We debugged this and [these
> changes|https://github.com/fusesource/jansi/commit/63bd892b2bdfc253ec119a57bdd42df5e80fd859#diff-d59db8655d9ae2d11948e2b411c34fc9e8513f29065d82c978d7128dafbe3bafR414-R420]
> in JAnsi introduced in the above upgraded version, is the source of the
> exception. The NPE is caused because the {{out}} reference is {{null}} at the
> time it wants to uninstall the {{AnsiOutputStream}}. This reference is nulled
> because we use the Plexus interactivity library which [disposes the
> {{DefaultOutputHandler}}|https://github.com/codehaus-plexus/plexus-interactivity/blob/master/plexus-interactivity-api/src/main/java/org/codehaus/plexus/components/interactivity/DefaultOutputHandler.java#L51-L54]
> on the tear down of Plexus, in which the {{System.out}} reference will be
> closed which is in fact the {{out}} reference of the {{AnsiConsole}} JAnsi
> will be [initialized
> before|https://github.com/apache/maven/blob/3e917677e484067b853eaa4a6de44ebcf5a988de/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java#L200]
> the Plexus container). This happens
> [here|https://github.com/apache/maven/blob/3e917677e484067b853eaa4a6de44ebcf5a988de/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java#L202],
> so before JAnsi will be uninstalled in
> [here|https://github.com/apache/maven/blob/3e917677e484067b853eaa4a6de44ebcf5a988de/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java#L203].
> There are two options to solve this:
> 1. Report this to JAnsi such that they catch this valid use case and do not
> throw as this worked without any exceptions in older versions.
> 2. Fix the {{MessageUtils#doSystemUninstall()}} and catch all exceptions and
> swallow them, as if it can't uninstall it, then Maven itself is not capable
> of fixing this state either. This is already done in a similar way
> [here|https://github.com/apache/maven-shared-utils/blob/17091d82508deb9b7067f3434ba16f660ffc5023/src/main/java/org/apache/maven/shared/utils/logging/MessageUtils.java#L85-L92]
> for removing the shutdown hook.
> Our proposal is to do #2 which would make Maven itself resilient to such use
> cases as there are other extensions/plugin out there which also retrieve a
> reference for the system output streams and therefore they would fail with
> Maven 4.0.0. This would also make this part future proof, as when there are
> other errors thrown during the uninstall, Maven itself does not break.
> We can as well report this to JAnsi too such that this gets fixed there as
> well.
>
> What are your opinions on that?
--
This message was sent by Atlassian Jira
(v8.3.4#803005)