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;