public void run()

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();
        }
    }