diff --git a/spring-boot-project/spring-boot-cli/src/main/java/org/springframework/boot/cli/command/options/OptionHandler.java b/spring-boot-project/spring-boot-cli/src/main/java/org/springframework/boot/cli/command/options/OptionHandler.java index 871be69a999a..a39feac1836f 100644 --- a/spring-boot-project/spring-boot-cli/src/main/java/org/springframework/boot/cli/command/options/OptionHandler.java +++ b/spring-boot-project/spring-boot-cli/src/main/java/org/springframework/boot/cli/command/options/OptionHandler.java @@ -34,6 +34,7 @@ import joptsimple.OptionDescriptor; import joptsimple.OptionParser; import joptsimple.OptionSet; +import joptsimple.OptionSpec; import joptsimple.OptionSpecBuilder; import org.springframework.boot.cli.command.OptionParsingCommand; @@ -55,11 +56,26 @@ public class OptionHandler { private Collection optionHelp; public OptionSpecBuilder option(String name, String description) { - return getParser().accepts(name, description); + OptionParser parser = getParser(); + if (parser.recognizedOptions().containsKey(name)) { + throw new IllegalArgumentException("Option key -" + name + " duplicated."); + } + + return parser.accepts(name, description); } public OptionSpecBuilder option(Collection aliases, String description) { - return getParser().acceptsAll(aliases, description); + OptionParser parser = getParser(); + + Map> recognizedOptions = parser.recognizedOptions(); + for (String alias : aliases) { + if (recognizedOptions.containsKey(alias)) { + throw new IllegalArgumentException( + "Option key -" + alias + " duplicated."); + } + } + + return parser.acceptsAll(aliases, description); } public OptionParser getParser() {