diff --git a/common/src/main/java/org/mvndaemon/mvnd/common/Environment.java b/common/src/main/java/org/mvndaemon/mvnd/common/Environment.java index 96501e11..5d0e410d 100644 --- a/common/src/main/java/org/mvndaemon/mvnd/common/Environment.java +++ b/common/src/main/java/org/mvndaemon/mvnd/common/Environment.java @@ -26,7 +26,6 @@ import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.Locale; -import java.util.Objects; import java.util.Optional; import java.util.Properties; import java.util.function.Consumer; @@ -43,6 +42,15 @@ import java.util.stream.Stream; */ public enum Environment { + /** + * Delete log files under the mvnd.registry directory that are older than mvnd.logPurgePeriod + */ + PURGE(null, null, null, OptionType.VOID, Flags.OPTIONAL, "--purge"), + /** Prints the status of daemon instances registered in the registry specified by mvnd.registry */ + STATUS(null, null, null, OptionType.VOID, Flags.OPTIONAL, "--status"), + /** Stop all daemon instances registered in the registry specified by mvnd.registry */ + STOP(null, null, null, OptionType.VOID, Flags.OPTIONAL, "--stop"), + // // Log properties // @@ -216,7 +224,11 @@ public enum Environment { Environment(String property, String environmentVariable, Object default_, OptionType type, int flags, String... options) { - this.property = Objects.requireNonNull(property); + if (property == null && options.length == 0) { + throw new IllegalArgumentException( + "An " + Environment.class.getSimpleName() + " entry must have property or options set"); + } + this.property = property; this.environmentVariable = environmentVariable; this.default_ = default_ != null ? default_.toString() : null; this.flags = flags; @@ -346,7 +358,8 @@ public enum Environment { } return Stream.of(values) .filter(env -> !env.isInternal()) - .sorted(Comparator.comparing(Environment::getProperty)) + .sorted(Comparator. comparing(env -> env.property != null ? env.property : "") + .thenComparing(env -> !env.options.isEmpty() ? env.options.get(0) : "")) .map(env -> new DocumentedEnumEntry<>(env, props.getProperty(env.name()))); } diff --git a/common/src/main/java/org/mvndaemon/mvnd/common/OptionType.java b/common/src/main/java/org/mvndaemon/mvnd/common/OptionType.java index 09a5861e..082eda17 100644 --- a/common/src/main/java/org/mvndaemon/mvnd/common/OptionType.java +++ b/common/src/main/java/org/mvndaemon/mvnd/common/OptionType.java @@ -49,7 +49,9 @@ public enum OptionType { /** A local file system path */ PATH, /** A string */ - STRING; + STRING, + /** No value */ + VOID; public String normalize(String value) { return value; @@ -65,6 +67,7 @@ public enum OptionType { throw new RuntimeException("Could not read " + cliOptionsPath, e); } return Stream.of(values) + .filter(opt -> opt != VOID) .sorted(Comparator.comparing(OptionType::name)) .map(env -> new DocumentedEnumEntry<>(env, props.getProperty(env.name()))); } diff --git a/daemon/src/main/java/org/apache/maven/cli/MvndHelpFormatter.java b/daemon/src/main/java/org/apache/maven/cli/MvndHelpFormatter.java index d2583375..cfa89ce5 100644 --- a/daemon/src/main/java/org/apache/maven/cli/MvndHelpFormatter.java +++ b/daemon/src/main/java/org/apache/maven/cli/MvndHelpFormatter.java @@ -70,24 +70,40 @@ public class MvndHelpFormatter { int indentPos = help.length() + indent.length(); int lineEnd = help.length() + HelpFormatter.DEFAULT_WIDTH; spaces(help, HelpFormatter.DEFAULT_LEFT_PAD); - help - .append("-D") - .append(env.getProperty()) - .append("=<") - .append(env.getType().name().toLowerCase(Locale.ROOT)) - .append('>'); + final String property = env.getProperty(); + if (property != null) { + help + .append("-D") + .append(property); + if (env.getType() != OptionType.VOID) { + help + .append("=<") + .append(env.getType().name().toLowerCase(Locale.ROOT)) + .append('>'); + + } + } final List opts = env.getOptions(); if (!opts.isEmpty()) { - for (String opt : opts) { - help - .append(',') - .append(opt); + if (property != null) { + help.append(';'); + } + boolean first = true; + for (String opt : opts) { + if (first) { + first = false; + } else { + help.append(','); + } + help.append(opt); + } + if (env.getType() != OptionType.VOID) { + help + .append(" <") + .append(env.getType().name().toLowerCase(Locale.ROOT)) + .append('>'); } - help - .append(" <") - .append(env.getType().name().toLowerCase(Locale.ROOT)) - .append('>'); } help.append(' '); diff --git a/integration-tests/src/test/java/org/mvndaemon/mvnd/junit/TestRegistry.java b/integration-tests/src/test/java/org/mvndaemon/mvnd/junit/TestRegistry.java index 78d5848c..2207e776 100644 --- a/integration-tests/src/test/java/org/mvndaemon/mvnd/junit/TestRegistry.java +++ b/integration-tests/src/test/java/org/mvndaemon/mvnd/junit/TestRegistry.java @@ -20,7 +20,6 @@ import java.util.List; import java.util.Optional; import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit; - import org.assertj.core.api.Assertions; import org.mvndaemon.mvnd.common.DaemonInfo; import org.mvndaemon.mvnd.common.DaemonRegistry;