2016-04-22 6 views
3

Wenn ich die Compiler-Ausgabe sehen möchte, aktivieren Sie normalerweise die verbose Option für das Maven-Compiler-Plugin.Keine ausführliche Ausgabe, wenn fork-Option für Maven-Compiler-Plugin verwendet wird

Dies funktioniert jedoch nicht, wenn es zusammen mit der Option fork verwendet wird. Die Kompilierung wird in einem anderen Prozess ausgeführt und es scheint, dass Maven die Ausgabe nicht an die Konsole umleitet.

sieht mein Codebeispiel wie folgt

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>3.5.1</version> 
      <configuration> 
       <fork>true</fork> 
       <verbose>true</verbose> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

Wer weiß, wie kann ich sehen, was während der Kompilierung geschieht?

In diesem link sehe ich, dass die Verwendung der beiden Optionen zusammen (Gabel und verbose) wird empfohlen.

Wie jedoch bereits erwähnt, funktionieren die beiden Optionen in der Praxis nicht gut, wenn zusammen verwendet werden.

+0

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

+0

@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. –

+0

@ Michael-O Ich schreibe eine Antwort, es sieht aus wie ein Bug im Plexus-Compiler. – Tunaki

Antwort

4

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 verboseis 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.

+0

möchten Sie dies möglicherweise mit Plexus Compiler melden. PRs sind willkommen und ich bin gespannt auf die Fusion. –

+0

@ Michael-O Ja, schreibe gerade ein Problem :) – Tunaki

+0

@ Michael-O Ich habe es erstellt. Werde versuchen, an einem Patch zu arbeiten, wenn ich die Zeit bekomme :)! – Tunaki

Verwandte Themen