Merge pull request #12337 from Christoph Dreis

* gh-12337:
  Remove workaround for JDK-8023130 in RunProcess
pull/12337/merge
Andy Wilkinson 7 years ago
commit ff5dd747f9

@ -16,16 +16,10 @@
package org.springframework.boot.loader.tools; package org.springframework.boot.loader.tools;
import java.io.BufferedReader;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.io.InputStreamReader;
import java.lang.reflect.Method;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collection; import java.util.Collection;
import java.util.Locale;
import org.springframework.util.ReflectionUtils;
/** /**
* Utility used to run a process. * Utility used to run a process.
@ -38,9 +32,6 @@ import org.springframework.util.ReflectionUtils;
*/ */
public class RunProcess { public class RunProcess {
private static final Method INHERIT_IO_METHOD = ReflectionUtils
.findMethod(ProcessBuilder.class, "inheritIO");
private static final long JUST_ENDED_LIMIT = 500; private static final long JUST_ENDED_LIMIT = 500;
private File workingDirectory; private File workingDirectory;
@ -81,13 +72,10 @@ public class RunProcess {
builder.directory(this.workingDirectory); builder.directory(this.workingDirectory);
builder.command().addAll(args); builder.command().addAll(args);
builder.redirectErrorStream(true); builder.redirectErrorStream(true);
boolean inheritedIO = inheritIO(builder); builder.inheritIO();
try { try {
Process process = builder.start(); Process process = builder.start();
this.process = process; this.process = process;
if (!inheritedIO) {
redirectOutput(process);
}
SignalUtils.attachSignalHandler(this::handleSigInt); SignalUtils.attachSignalHandler(this::handleSigInt);
if (waitForProcess) { if (waitForProcess) {
try { try {
@ -108,61 +96,6 @@ public class RunProcess {
} }
} }
private boolean inheritIO(ProcessBuilder builder) {
if (isInheritIOBroken()) {
return false;
}
try {
INHERIT_IO_METHOD.invoke(builder);
return true;
}
catch (Exception ex) {
return false;
}
}
// There's a bug in the Windows VM (https://bugs.openjdk.java.net/browse/JDK-8023130)
// that means we need to avoid inheritIO
private static boolean isInheritIOBroken() {
if (!System.getProperty("os.name", "none").toLowerCase(Locale.ENGLISH)
.contains("windows")) {
return false;
}
String runtime = System.getProperty("java.runtime.version");
if (!runtime.startsWith("1.7")) {
return false;
}
String[] tokens = runtime.split("_");
if (tokens.length < 2) {
return true; // No idea actually, shouldn't happen
}
try {
Integer build = Integer.valueOf(tokens[1].split("[^0-9]")[0]);
if (build < 60) {
return true;
}
}
catch (Exception ex) {
return true;
}
return false;
}
private void redirectOutput(Process process) {
new Thread(() -> {
try (BufferedReader reader = new BufferedReader(
new InputStreamReader(process.getInputStream()))) {
reader.lines().forEach((line) -> {
System.out.println(line);
System.out.flush();
});
}
catch (Exception ex) {
// Ignore
}
}).start();
}
/** /**
* Return the running process. * Return the running process.
* @return the process or {@code null} * @return the process or {@code null}

Loading…
Cancel
Save