diff --git a/hadoop-common-project/hadoop-common/CHANGES.txt b/hadoop-common-project/hadoop-common/CHANGES.txt index 50880a3ef8c..7bc04ffb20c 100644 --- a/hadoop-common-project/hadoop-common/CHANGES.txt +++ b/hadoop-common-project/hadoop-common/CHANGES.txt @@ -643,6 +643,9 @@ Release 2.8.0 - UNRELEASED HADOOP-12475. Replace guava Cache with ConcurrentHashMap for caching Connection in ipc Client (Walter Su via sjlee) + HADOOP-12479. ProtocMojo does not log the reason for a protoc compilation + failure. (cnauroth) + OPTIMIZATIONS HADOOP-12051. ProtobufRpcEngine.invoke() should use Exception.toString() diff --git a/hadoop-maven-plugins/src/main/java/org/apache/hadoop/maven/plugin/protoc/ProtocMojo.java b/hadoop-maven-plugins/src/main/java/org/apache/hadoop/maven/plugin/protoc/ProtocMojo.java index b9be33e5de5..0dcac0e8e45 100644 --- a/hadoop-maven-plugins/src/main/java/org/apache/hadoop/maven/plugin/protoc/ProtocMojo.java +++ b/hadoop-maven-plugins/src/main/java/org/apache/hadoop/maven/plugin/protoc/ProtocMojo.java @@ -248,11 +248,15 @@ public class ProtocMojo extends AbstractMojo { exec = new Exec(this); out = new ArrayList(); - if (exec.run(command, out) != 0) { + List err = new ArrayList<>(); + if (exec.run(command, out, err) != 0) { getLog().error("protoc compiler error"); for (String s : out) { getLog().error(s); } + for (String s : err) { + getLog().error(s); + } throw new MojoExecutionException("protoc failure"); } // Write the new checksum file on success. diff --git a/hadoop-maven-plugins/src/main/java/org/apache/hadoop/maven/plugin/util/Exec.java b/hadoop-maven-plugins/src/main/java/org/apache/hadoop/maven/plugin/util/Exec.java index 37dbc72f2f2..ce3543cd418 100644 --- a/hadoop-maven-plugins/src/main/java/org/apache/hadoop/maven/plugin/util/Exec.java +++ b/hadoop-maven-plugins/src/main/java/org/apache/hadoop/maven/plugin/util/Exec.java @@ -42,12 +42,26 @@ public class Exec { /** * Runs the specified command and saves each line of the command's output to * the given list. - * + * * @param command List containing command and all arguments * @param output List in/out parameter to receive command output * @return int exit code of command */ public int run(List command, List output) { + return this.run(command, output, null); + } + + /** + * Runs the specified command and saves each line of the command's output to + * the given list and each line of the command's stderr to the other list. + * + * @param command List containing command and all arguments + * @param output List in/out parameter to receive command output + * @param errors List in/out parameter to receive command stderr + * @return int exit code of command + */ + public int run(List command, List output, + List errors) { int retCode = 1; ProcessBuilder pb = new ProcessBuilder(command); try { @@ -66,6 +80,9 @@ public class Exec { stdOut.join(); stdErr.join(); output.addAll(stdOut.getOutput()); + if (errors != null) { + errors.addAll(stdErr.getOutput()); + } } catch (Exception ex) { mojo.getLog().warn(command + " failed: " + ex.toString()); }