public void execute()

in meecrowave-maven-plugin/src/main/java/org/apache/meecrowave/maven/MeecrowaveRunMojo.java [327:412]


    public void execute() {
        if (skip) {
            getLog().warn("Mojo skipped");
            return;
        }
        if (watcherBouncing <= 0 && (reloadGoals == null || reloadGoals.isEmpty())) {
            try {
                reloadGoals = singletonList("process-classes");
            } catch (final RuntimeException re) { // mojo in read only mode
                // no-op
            }
        }
        logConfigurationErrors();

        final Map<String, String> originalSystemProps;
        if (systemProperties != null) {
            originalSystemProps = systemProperties.keySet().stream()
                                                  .filter(System.getProperties()::containsKey)
                                                  .collect(toMap(identity(), System::getProperty));
            systemProperties.forEach(System::setProperty);
        } else {
            originalSystemProps = null;
        }

        final Thread thread = Thread.currentThread();
        final ClassLoader loader = thread.getContextClassLoader();
        final Supplier<ClassLoader> appLoaderSupplier = createClassLoader(loader);
        thread.setContextClassLoader(appLoaderSupplier.get());
        try {
            final Configuration builder = getConfig();
            try (final Meecrowave meecrowave = new Meecrowave(builder) {
                @Override
                protected void beforeStart() {
                    scriptCustomization(jsCustomizers, "js", singletonMap("meecrowaveBase", base.getAbsolutePath()));
                }
            }) {
                meecrowave.start();
                final String fixedContext = ofNullable(context).orElse("");
                final Meecrowave.DeploymentMeta deploymentMeta = new Meecrowave.DeploymentMeta(
                        fixedContext,
                        webapp != null && webapp.isDirectory() ? webapp : null,
                        jsContextCustomizer == null ?
                                null : ctx -> scriptCustomization(
                                singletonList(jsContextCustomizer), "js", singletonMap("context", ctx)),
                                context -> reload(meecrowave, fixedContext, appLoaderSupplier, loader));
                deploy(meecrowave, deploymentMeta);
                final Scanner scanner = new Scanner(System.in);
                String cmd;
                boolean quit = false;
                while (!quit && (cmd = scanner.next()) != null) {
                    cmd = cmd.trim();
                    switch (cmd) {
                        case "": // normally impossible with a Scanner but we can move to another "reader"
                        case "q":
                        case "quit":
                        case "e":
                        case "exit":
                            quit = true;
                            break;
                        case "r":
                        case "reload":
                            reload(meecrowave, fixedContext, appLoaderSupplier, loader);
                            break;
                        default:
                            getLog().error("Unknown command: '" + cmd + "', use 'quit' or 'exit' or 'reload'");
                    }
                }
            }
        } finally {
            if (forceLog4j2Shutdown) {
                LogManager.shutdown();
            }
            destroyTcclIfNeeded(thread, loader);
            thread.setContextClassLoader(loader);
            if (originalSystemProps != null) {
                systemProperties.keySet().forEach(k -> {
                    final Optional<String> originalValue = ofNullable(originalSystemProps.get(k));
                    if (originalValue.isPresent()) {
                        System.setProperty(k, originalValue.get());
                    } else {
                        System.clearProperty(k);
                    }
                });
            }
        }
    }