in src/main/java/org/apache/sling/maven/kickstart/run/LauncherCallable.java [175:264]
private ProcessDescription start(final File jar) throws Exception {
final ProcessDescription cfg = new ProcessDescription(
this.configuration.getId(),
this.configuration.getFolder(),
this.configuration.getServer() + ":" + this.configuration.getControlPort(),
logger
);
final ProcessBuilder builder = new ProcessBuilder();
final List<String> args = new ArrayList<String>();
String javaHome = System.getenv("JAVA_HOME");
String javaCmd = javaHome != null ? Paths.get(javaHome, "bin", "java").toString() : "java";
args.add(javaCmd);
add(args, this.configuration.getVmOpts());
add(args, this.configuration.getVmDebugOpts(this.environment.getDebug()));
args.add("-cp");
args.add("bin");
args.add(Main.class.getName());
// first three arguments: jar, listener port, verbose
args.add(jar.getPath());
args.add(String.valueOf(cfg.getControlClient().getPort()));
args.add("true");
// from here on kickstart properties
add(args, this.configuration.getOpts());
if(this.configuration.getAdditionalFeatureFile() != null) {
args.add("-af");
args.add(this.configuration.getAdditionalFeatureFile().getAbsolutePath());
}
final String contextPath = this.configuration.getContextPath();
if ( contextPath != null && contextPath.length() > 0 && !contextPath.equals("/") ) {
args.add("-r");
args.add(contextPath);
}
if ( this.configuration.getPort() != null ) {
args.add("-p");
args.add(this.configuration.getPort());
}
if ( this.configuration.getControlPort() != null ) {
args.add("-j");
args.add(this.configuration.getControlPort());
}
if ( this.configuration.getRunmode() != null && this.configuration.getRunmode().length() > 0 ) {
args.add("-Dsling.run.modes=" + this.configuration.getRunmode());
}
logger.info("Is Shutdown On Exit: " + this.environment.isShutdownOnExit());
if ( !this.environment.isShutdownOnExit() ) {
args.add("start");
}
builder.command(args.toArray(new String[args.size()]));
builder.directory(this.configuration.getFolder());
builder.redirectErrorStream(true);
logger.info("Starting Kickstart " + this.configuration.getId() + "...");
logger.info("Starting Kickstart, arguments: " + args);
String stdOutFile = this.configuration.getStdOutFile();
if (StringUtils.isNotBlank(stdOutFile)) {
File absoluteStdOutFile = new File(builder.directory(), stdOutFile);
// make sure to create the parent directories (if they do not exist yet)
absoluteStdOutFile.getParentFile().mkdirs();
builder.redirectOutput(absoluteStdOutFile);
logger.info("Redirecting stdout and stderr to " + absoluteStdOutFile);
} else {
builder.redirectOutput(Redirect.INHERIT);
}
logger.debug("Kickstart cmd: " + builder.command());
logger.debug("Kickstart dir: " + builder.directory());
try {
logger.info("Before Builder start()");
cfg.setProcess(builder.start());
logger.info("After Builder start(), cfg: " + cfg);
} catch (final IOException e) {
if (cfg.getProcess() != null) {
cfg.getProcess().destroy();
cfg.setProcess(null);
}
throw new Exception("Could not start the Kickstart", e);
}
return cfg;
}