in src/main/java/org/apache/sling/kickstart/app/KickstartStarter.java [136:242]
public void run() {
try {
URL mainFeatureURL = checkFeatureFile(mainFeatureFile);
if(mainFeatureURL == null && !nofm) {
if(nofar) {
mainFeatureURL = getClass().getResource(DEFAULT_SLING_FEATURE_MODEL_FILE_PATH);
} else {
mainFeatureURL = getClass().getResource(DEFAULT_SLING_FEATURE_ARCHIVE_PATH);
}
}
if(mainFeatureURL == null && (additionalFeatureFile == null || additionalFeatureFile.isEmpty())) {
error("No Feature(s) Provided", null);
return;
}
List<String> argumentList = new ArrayList<>();
argumentList.add("-f");
argumentList.add(mainFeatureURL.toString());
if(additionalFeatureFile != null) {
for (String additional : additionalFeatureFile) {
URL additionalURL = checkFeatureFile(additional);
if (additionalURL != null) {
argumentList.add("-f");
argumentList.add(additionalURL.toString());
}
}
}
// Log File and Level must be configured through a Feature Model snippet and then
// the configuration override must be set
boolean hasLogLevel = StringUtils.isNotEmpty(logLevel);
boolean hasLogFile = StringUtils.isNotEmpty(logFile);
if(hasLogLevel || hasLogFile) {
String addition = "";
if(hasLogLevel) {
addition += "\"org.apache.sling.commons.log.level\":\"" + logLevel + "\"" + (hasLogFile ? ", " : "") + "\n";
}
if(hasLogFile) {
addition += "\"org.apache.sling.commons.log.file\":\"" + logFile + "\"\n";
}
String configFile = String.format(LOG_CONFIGURATION_FM, addition);
// Write to temporary file and add link to arguments list including Configuration Class Override
File temp = File.createTempFile("sling", ".json");
FileWriter writer = new FileWriter(temp);
writer.write(configFile);
writer.close();
URL tempUrl = temp.toURI().toURL();
argumentList.add("-f");
argumentList.add(tempUrl.toString());
argumentList.add("-CC");
argumentList.add("\"org.apache.sling.commons.log.LogManager=MERGE_LATEST\"");
}
if(overrides != null) {
for (String override : overrides) {
int index = override.indexOf('=');
if (index > 0 && index < (override.length() - 1)) {
String type = override.substring(0, index);
String value = override.substring(index + 1);
//TODO: Check the type like 'CC' to avoid wrong types
argumentList.add('-' + type);
argumentList.add(value);
} else {
System.out.println("Wrong Override format: " + override + " -> ignored");
}
}
}
if(StringUtils.isNotEmpty(port)) {
addArgument(argumentList, PROP_PORT, port);
}
if(StringUtils.isNotEmpty(address)) {
addArgument(argumentList, PROP_HOST, address);
}
if(StringUtils.isNotEmpty(contextPath)) {
addArgument(argumentList, PROP_CONTEXT_PATH, contextPath);
}
if(StringUtils.isNotEmpty(slingHome)) {
argumentList.add("-p");
argumentList.add(slingHome);
argumentList.add("-c");
argumentList.add(slingHome + "/cache");
}
if(verbose) {
argumentList.add("-v");
}
if(properties != null) {
for(Entry<String, String> entry: properties.entrySet()) {
addArgument(argumentList, entry.getKey(), entry.getValue());
}
}
System.out.println("Before Launching Feature Launcher, arguments: " + argumentList);
// Now we have to handle any Start Option
ControlAction controlAction = getControlAction(command);
int answer = doControlAction(controlAction, controlAddress);
if (answer >= 0) {
doTerminateVM(answer);
return;
}
// finally start Sling
if (!doStart(argumentList)) {
error("Failed to start Sling; terminating", null);
doTerminateVM(1);
return;
}
} catch(Throwable t) {
System.out.println("Caught an Exception: " + t.getLocalizedMessage());
t.printStackTrace();
}
}