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