5

W bibliotece CLI Apache Commons, czy można pominąć użycie krótkiej nazwy, zmuszając użytkownika do używania długiej nazwy?Apache Commons CLI: jak zapobiec używaniu krótkich nazw opcji?

zwykle, opcje są zdefiniowane następująco:

new Option("u", "username", true, "automatic user name") 

Chciałbym zabraniają korzystania z "u". Ale jeśli zastąpię go null lub pusty ciąg, są wyjątki ...

Dlaczego ten wymóg? Chciałbym, aby wszystkie moje opcje były tylko w formie --optionName = optionValue, ponieważ niektóre elementy mojej aplikacji to Spring Boot, a Spring Boot rozpoznaje domyślne opcje w tym formacie.

Dodatkowo, dla spójności wśród deweloperów i użytkowników oraz uproszczenie dokumentacji, uważam, że lepiej, jeśli mamy niepowtarzalną drogę do korzystania z opcji zamiast 2.

Odpowiedz

5

przekazując null jako krótką nazwą działa na mnie, gdy przy użyciu najnowszej wersji Apache Commons Cli 1.3.1 i DefaultParser (który jest jedynym nie przestarzałe teraz):

Options options = new Options(); 

    Option option = new Option(null, "help", true, "some desc"); 

    options.addOption(option); 

    CommandLineParser parser = new DefaultParser(); 
    CommandLine cmd = parser.parse(options, new String[] {"--help=foobar"}); 

    // automatically generate the help statement 
    HelpFormatter formatter = new HelpFormatter(); 
    formatter.printHelp("ant", options); 

    assertEquals(cmd.hasOption("help"), true); 
    String optionValue = cmd.getOptionValue("help"); 
    assertEquals("foobar", optionValue); 
+0

Dzięki za @centric odpowiedzi, ale może być głupi, nie rozumiem, w jaki sposób zapytanie o obiekt "cmd" w przypadku zerowego argumentu o krótkim argumencie. Wygląda na to, że wszystkie metody w klasie CommandLine wymagają podania nazwy jako parametru ... Czy możesz mi w tym pomóc? Dzięki ! –

+0

Mój kod używa 'cmd.hasOption (" help ")' do sprawdzenia, czy '--help' został podany, czy to też działa dla ciebie? – centic

+0

tak, twój kod działa dobrze i dziękuję ci za to. W rzeczywistości chcę uzyskać wartość opcji. Na przykład wyobraźmy sobie, że pomoc może otrzymać wartość, jeśli zostanie zadeklarowana w ten sposób: nowa opcja (null, "help", false, "some desc"); Jak uzyskać dostęp do wartości podanej w wierszu poleceń, aby "pomóc"? Zakochałem się, jak wszystkie metody API muszą użyć krótkiego argusa do zapytania o wartość ... –