Jaki jest dobry sposób analizowania argumentów wiersza poleceń w Javie?
java
command-line
command-line-arguments
picocli
Lindelof
źródło
źródło
How to parse java command line arguments?
. Ale nikt tak naprawdę nie chce pisać kodu, aby to zrobić, ale raczej użyć narzędzia. Ale szukanie narzędzi i polubień nie jest konstruktywne :(Odpowiedzi:
Sprawdź te:
Lub rzuć własnym:
Na przykład w ten sposób
commons-cli
analizujesz 2 argumenty łańcuchowe:użycie z wiersza poleceń:
źródło
Spójrz na najnowszego JCommandera .
Stworzyłem to. Z przyjemnością otrzymam pytania lub prośby o nowe funkcje.
źródło
Próbowałem utrzymać listę parserów Java CLI .
źródło
Czy należy zbudować własny analizator składni wiersza poleceń Java, czy skorzystać z biblioteki?
Wiele małych aplikacji podobnych do narzędzi prawdopodobnie przetwarza własne parsowanie wiersza poleceń, aby uniknąć dodatkowej zależności zewnętrznej. picocli może być interesującą alternatywą.
Picocli to nowoczesna biblioteka i środowisko do łatwego tworzenia wydajnych, przyjaznych dla użytkownika aplikacji obsługujących GraalVM. Znajduje się w 1 pliku źródłowym, więc aplikacje mogą uwzględnić go jako źródło, aby uniknąć dodawania zależności.
Obsługuje kolory, autouzupełnianie, podkomendy i wiele innych. Napisane w Javie, do użytku z Groovy, Kotlin, Scala itp.
Funkcje:
<command> -xvfInputFile
a także<command> -x -v -f InputFile
)"1..*"
,"3..5"
Komunikat pomocy dotyczącej użytkowania można łatwo dostosować za pomocą adnotacji (bez programowania). Na przykład:
( źródło )
Nie mogłem się powstrzymać przed dodaniem jeszcze jednego zrzutu ekranu, aby pokazać, jakie komunikaty pomocy dotyczące użytkowania są możliwe. Pomoc dotycząca użytkowania jest obliczem Twojej aplikacji, więc bądź kreatywny i baw się dobrze!
Uwaga: Stworzyłem picocli. Informacje zwrotne lub pytania bardzo mile widziane.
źródło
Użyłem JOpt i okazało się, że jest to całkiem przydatne: http://jopt-simple.sourceforge.net/
Na pierwszej stronie znajduje się również lista około 8 alternatywnych bibliotek, sprawdź je i wybierz tę, która najbardziej odpowiada Twoim potrzebom.
źródło
Ktoś wskazał mi ostatnio na args4j, który jest oparty na adnotacjach. Naprawdę to lubie!
źródło
Jest to biblioteka parsująca Google'a z linii poleceń, otwarta w ramach projektu Bazel. Osobiście uważam, że jest najlepszy i o wiele łatwiejszy niż CLI Apache.
https://github.com/pcj/google-options
Instalacja
Bazel
Gradle
Maven
Stosowanie
Utwórz klasę, która rozszerza
OptionsBase
i definiuje twoje@Option
(s).Analizuj argumenty i używaj ich.
https://github.com/pcj/google-options
źródło
myexecutable -c file.json -d 42 --outdir ./out
. I nie rozumiem, jak definiujecie opcje krótkich / długich / opisów ... PozdrawiamSpójrz na projekt Commons CLI , wiele dobrych rzeczy.
źródło
Tak
Myślę, że szukasz czegoś takiego: http://commons.apache.org/cli
źródło
Wiem, że większość ludzi znajdzie 10 milionów powodów, dla których nie lubią mojej drogi, ale nieważne. Lubię upraszczać, więc po prostu oddzielam klucz od wartości za pomocą '=' i przechowuję je w HashMap jak poniżej:
Zawsze możesz utrzymywać listę z argumentami, których oczekujesz, aby pomóc użytkownikowi na wypadek, gdyby zapomniał o argumentie lub użył niewłaściwego ... Jednak jeśli chcesz mieć zbyt wiele funkcji, to rozwiązanie i tak nie jest dla Ciebie.
źródło
Może te
Pakiet analizujący opcje wiersza poleceń JArgs dla Javy - ten niewielki projekt zapewnia wygodny, kompaktowy, wstępnie spakowany i kompleksowo udokumentowany zestaw analizatorów opcji wiersza poleceń do użytku programistów Java. Początkowo zapewnione jest parsowanie zgodne z „getopt” w stylu GNU.
ritopt, The Ultimate Parser Options for Java - Chociaż wprowadzono kilka standardów opcji wiersza poleceń, ritopt przestrzega konwencji określonych w pakiecie opt.
źródło
Ciekawy może być ten meta artykuł nieszczęścia:
http://furiouspurpose.blogspot.com/2008/07/command-line-parsing-libraries-for-java.html
źródło
Napisałem inny: http://argparse4j.sourceforge.net/
Argparse4j to biblioteka analizatora argumentów wiersza poleceń dla Java, oparta na argparse Pythona.
źródło
Jeśli znasz gnu getopt, istnieje port Java pod adresem : http://www.urbanophile.com/arenn/hacking/download.htm .
Wydaje się, że istnieją takie klasy:
źródło
linia lotnicza @ Github wygląda dobrze. Opiera się na adnotacjach i próbuje emulować struktury wiersza poleceń Git.
źródło
Jeśli korzystasz już z Spring Boot, parsowanie argumentów wychodzi z pudełka.
Jeśli chcesz uruchomić coś po uruchomieniu, zaimplementuj
ApplicationRunner
interfejs:Twoja
run
metoda zostanie wywołana po pomyślnym uruchomieniu kontekstu.Jeśli potrzebujesz dostępu do argumentów przed uruchomieniem kontekstu aplikacji, możesz po prostu ręcznie przeanalizować argumenty aplikacji:
I na koniec, jeśli potrzebujesz dostępu do swoich argumentów w fasoli, po prostu wstrzyknij
ApplicationArguments
:źródło
Argparse4j jest najlepszym, jaki znalazłem. Naśladuje on argusową bibliotekę Pythona, która jest bardzo wygodna i potężna.
źródło
Jeśli chcesz czegoś lekkiego (rozmiar słoika ~ 20 kb) i prostego w użyciu, możesz wypróbować argument-parser . Może być używany w większości przypadków użycia, obsługuje określanie tablic w argumencie i nie jest zależny od żadnej innej biblioteki. Działa z Javą 1.5 lub nowszą. Poniżej fragment pokazuje przykład, jak go używać:
Więcej przykładów można znaleźć tutaj
źródło
Nie polecam korzystania z
Apache Common CLI
biblioteki, ponieważ nie jest ona bezpieczna dla wątków.Wykorzystuje klasy stanowe ze zmiennymi statycznymi i metodami do wykonywania pracy wewnętrznej (np.
OptionBuilder
) I powinien być stosowany tylko w ściśle kontrolowanych sytuacjach jednowątkowych.źródło
Ponieważ jeden z wcześniej wspomnianych komentarzy ( https://github.com/pcj/google-options ) byłby dobrym wyborem na początek.
Chcę dodać jedną rzecz:
1) Jeśli wystąpi błąd odbicia parsera, spróbuj użyć nowszej wersji guawy. w moim przypadku:
2) Podczas uruchamiania wiersza polecenia:
3) Gdy potrzebujesz pomocy dotyczącej użytkowania, po prostu wpisz:
źródło
Dla użytkowników Springa powinniśmy również wspomnieć o https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/core/env/SimpleCommandLinePropertySource.html i jego bracie bliźniaku https: //docs.spring .io / spring / docs / current / javadoc-api / org / springframework / core / env / JOptCommandLinePropertySource.html (implementacja JOpt tej samej funkcjonalności). Zaletą Spring jest to, że możesz bezpośrednio powiązać argumenty wiersza poleceń z atrybutami, jest tutaj przykład https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/core/env/ CommandLinePropertySource.html
źródło