UPDATE (25/06/2016): This issue der plexus-compiler
fixiert wurde und der angegebene Code in der Frage werden ab Version 2.8 arbeiten.
Nachdem durch den Quellcode zu lesen, ist dies ein Fehler des plexus-compiler
2.7, die die Bibliothek durch die die Java-Sourcen zu kompilieren maven-compiler-plugin
3.5.1 verwendet intern ist.
So geht es so im Code: die maven-compiler-plugin
ein CompilerConfiguration
und setzt seine fork
und verbose
entsprechend dem vorgegebenen Konfigurationselement in der POM genannt Objekt auffüllt. Das Element verbose
is correctly read and added to the compiler arguments:
if (config.isVerbose())
{
args.add("-verbose");
}
Dann befindet sich ein Schalter depending on whether we're forking or not.
Wenn wir nicht sind, kommen wir schließlich auf den Code unten Aufruf javac
und dessen Ausgang is stored in the compilation result:
ok = (Integer) compile.invoke(null, new Object[]{ args, new PrintWriter(out) });
messages = parseModernStream(ok.intValue(), new BufferedReader(new StringReader(out.toString())));
schließlich returned with:
return new CompilerResult(success, messages);
So weit so gut, die maven-compiler-plugin
wird diese Meldungen umlaufen und sie in die Konsole ausgeben. Da der Parameter verbose
festgelegt wurde, haben wir alle Nachrichten.
Wenn wir sind, dann eine ausführbare Datei (die standardmäßig auf den javac
in der PATH) abgerufen und the compiler arguments are correctly set:
for (String key : config.getCustomCompilerArgumentsAsMap().keySet())
{
if (StringUtils.isNotEmpty(key) && key.startsWith("-J"))
{
cli.addArguments(new String[]{ key });
}
}
Wir können dies bestätigen Maven läuft im Debug-Modus Mit -X
sehen wir die Nachricht:
Beachten Sie die -verbose
am Ende.
Und dann ist das der Fehler. Die Standardausgabe wird innerhalb einer out
variable
CommandLineUtils.StringStreamConsumer out = new CommandLineUtils.StringStreamConsumer();
korrekt verwendet als Parameter des Kompilierens Verfahren gespeichert werden, but completely ignored afterwards:
returnCode = CommandLineUtils.executeCommandLine(cli, out, err);
messages = parseModernStream(returnCode, new BufferedReader(new StringReader(err.getOutput())));
Hinweis, wie die Nachrichten, dass Will späteres Formular, was vom Plugin ausgegeben wird, wird nur mit den Fehlern und nicht mit der Standardausgabe gefüllt. Also einfach gesagt: Die Standardausgabe ist im ausführlichen Modus richtig eingestellt, wird aber ignoriert und nicht in das korrekte Übersetzungsergebnis übersetzt.
Ich sehe keine Abhilfe für das (außer nicht Forking). Ich habe die issue 20 in ihrem GitHub erstellt, um dies zu verfolgen.
Kann dies bestätigen. Seltsamerweise kann ich dazu keinen Fehlerbericht finden. Der nächste scheint https://issues.apache.org/jira/browse/MCOMPILER-81, aber es wurde automatisch geschlossen = /. – Tunaki
@Tunaki Ich mache eine automatische Schließung einmal im Jahr mit der Zustimmung der anderen Entwickler, JIRA aufzuräumen. Tickets, die seit mindestens drei Jahren nicht berührt wurden, werden nie wieder berührt, egal, ob sie wichtig sind oder nicht. –
@ Michael-O Ich schreibe eine Antwort, es sieht aus wie ein Bug im Plexus-Compiler. – Tunaki