Apa cara yang baik untuk mem-parsing argumen baris perintah di Jawa?
java
command-line
command-line-arguments
picocli
bagian belakang
sumber
sumber
How to parse java command line arguments?
. Tapi tidak ada yang benar-benar ingin menulis kode untuk melakukan ini, melainkan menggunakan alat. Tetapi mencari alat dan sejenisnya tidak konstruktif :(Jawaban:
Lihat ini:
Atau gulir sendiri:
Misalnya, ini adalah bagaimana Anda gunakan
commons-cli
untuk mem-parsing 2 argumen string:penggunaan dari baris perintah:
sumber
Lihatlah JCommander yang lebih baru .
Saya membuatnya. Saya senang menerima pertanyaan atau permintaan fitur.
sumber
Saya telah mencoba mempertahankan daftar parser Java CLI .
sumber
Haruskah Anda membuat parser baris perintah Java Anda sendiri, atau menggunakan perpustakaan?
Banyak aplikasi kecil yang mirip utilitas mungkin memutar parsing baris perintah mereka sendiri untuk menghindari ketergantungan eksternal tambahan. picocli mungkin menjadi alternatif yang menarik.
Picocli adalah pustaka dan kerangka kerja modern untuk membangun aplikasi baris perintah yang kuat, mudah digunakan, dan mendukung GraalVM dengan mudah. Ia hidup dalam 1 file sumber sehingga aplikasi dapat memasukkannya sebagai sumber untuk menghindari penambahan ketergantungan.
Ini mendukung warna, pelengkapan otomatis, sub-perintah, dan banyak lagi. Ditulis di Jawa, dapat digunakan dari Groovy, Kotlin, Scala, dll.
Fitur:
<command> -xvfInputFile
dan juga<command> -x -v -f InputFile
)"1..*"
,"3..5"
Pesan bantuan penggunaan mudah disesuaikan dengan anotasi (tanpa pemrograman). Sebagai contoh:
( sumber )
Saya tidak bisa menolak menambahkan satu tangkapan layar lagi untuk menunjukkan pesan bantuan penggunaan apa yang mungkin. Bantuan penggunaan adalah wajah aplikasi Anda, jadi jadilah kreatif dan bersenang-senang!
Penafian: Saya membuat picocli. Umpan balik atau pertanyaan sangat disambut.
sumber
Saya telah menggunakan JOPT dan merasa cukup berguna: http://jopt-simple.sourceforge.net/
Halaman depan juga menyediakan daftar sekitar 8 perpustakaan alternatif, periksa dan pilih satu yang paling sesuai dengan kebutuhan Anda.
sumber
Seseorang menunjuk saya ke args4j akhir-akhir ini yang didasarkan pada penjelasan. Aku benar-benar menyukainya!
sumber
Ini adalah parsing library baris perintah Google yang bersumber terbuka sebagai bagian dari proyek Bazel. Secara pribadi saya pikir itu yang terbaik di luar sana, dan jauh lebih mudah daripada Apache CLI.
https://github.com/pcj/google-options
Instalasi
Bazel
Gradle
Maven
Pemakaian
Buat kelas yang memperluas
OptionsBase
dan mendefinisikan@Option
(s) Anda.Pecahkan argumen dan gunakan.
https://github.com/pcj/google-options
sumber
myexecutable -c file.json -d 42 --outdir ./out
. Dan saya tidak melihat bagaimana Anda mendefinisikan opsi deskripsi pendek / panjang / ... CheersLihatlah proyek Commons CLI , banyak hal bagus di sana.
sumber
Yap.
Saya pikir Anda sedang mencari sesuatu seperti ini: http://commons.apache.org/cli
sumber
Saya tahu kebanyakan orang di sini akan menemukan 10 juta alasan mengapa mereka tidak menyukai cara saya, tetapi tidak pernah. Saya suka menjaga hal-hal sederhana, jadi saya hanya memisahkan kunci dari nilai menggunakan '=' dan menyimpannya dalam HashMap seperti ini:
Anda selalu dapat mempertahankan daftar dengan argumen yang Anda harapkan, untuk membantu pengguna jika dia lupa argumen atau menggunakan yang salah ... Namun, jika Anda ingin terlalu banyak fitur, solusi ini bukan untuk Anda.
sumber
Mungkin ini
Paket parsing opsi perintah JArgs untuk Java - proyek mungil ini menyediakan rangkaian parser opsi perintah baris yang nyaman, kompak, pra-paket dan didokumentasikan secara komprehensif untuk penggunaan programmer Java. Awalnya, parsing kompatibel dengan 'getopt' gaya GNU disediakan.
ritopt, Parser Opsi Utama untuk Java - Meskipun, beberapa standar opsi baris perintah telah disiapkan, ritopt mengikuti konvensi yang ditentukan dalam paket opt.
sumber
Anda mungkin menemukan meta-artikel ketidakbahagiaan ini menarik sebagai titik tolak:
http://furiouspurpose.blogspot.com/2008/07/command-line-parsing-libraries-for-java.html
sumber
Saya menulis satu lagi: http://argparse4j.sourceforge.net/
Argparse4j adalah parser argumen argumen baris perintah untuk Java, berdasarkan argparse Python.
sumber
Jika Anda terbiasa dengan gnu getopt, ada port Java di: http://www.urbanophile.com/arenn/hacking/download.htm .
Tampaknya ada beberapa kelas yang melakukan ini:
sumber
airline @ Github terlihat bagus. Ini didasarkan pada anotasi dan mencoba untuk meniru struktur baris perintah Git.
sumber
Jika Anda sudah menggunakan Spring Boot, parsing argumen keluar dari kotak.
Jika Anda ingin menjalankan sesuatu setelah startup, terapkan
ApplicationRunner
antarmuka:run
Metode Anda akan dipanggil setelah konteksnya berhasil dimulai.Jika Anda memerlukan akses ke argumen sebelum menjalankan konteks aplikasi Anda, Anda cukup menguraikan argumen aplikasi secara manual:
Dan akhirnya, jika Anda membutuhkan akses ke argumen Anda dalam kacang, cukup menyuntikkan
ApplicationArguments
:sumber
Argparse4j adalah yang terbaik yang saya temukan. Ini meniru perpustakaan argparse Python yang sangat nyaman dan kuat.
sumber
Jika Anda menginginkan sesuatu yang ringan (ukuran tabung ~ 20 kb) dan mudah digunakan, Anda dapat mencoba parser argumen . Ini dapat digunakan di sebagian besar kasus penggunaan, mendukung menentukan array dalam argumen dan tidak memiliki ketergantungan pada pustaka lain. Ini berfungsi untuk Java 1.5 atau lebih tinggi. Kutipan di bawah ini menunjukkan contoh cara menggunakannya:
Lebih banyak contoh dapat ditemukan di sini
sumber
Saya tidak akan merekomendasikan menggunakan
Apache Common CLI
perpustakaan, karena ini adalah non-threadsafe.Ia menggunakan kelas stateful dengan variabel statis dan metode untuk melakukan pekerjaan internal (misalnya
OptionBuilder
) dan hanya boleh digunakan dalam situasi berulir kuat yang dikontrol.sumber
Sebagai salah satu komentar yang disebutkan sebelumnya ( https://github.com/pcj/google-options ) akan menjadi pilihan yang baik untuk memulai.
Satu hal yang ingin saya tambahkan adalah:
1) Jika Anda mengalami kesalahan refleksi parser, coba gunakan versi jambu yang lebih baru. dalam hal ini:
2) Saat menjalankan commandline:
3) Saat Anda membutuhkan bantuan penggunaan, ketikkan:
sumber
Untuk pengguna Spring, kami juga harus menyebutkan https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/core/env/SimpleCommandLinePropertySource.html dan saudara kembarnya https: //docs.spring .io / spring / docs / current / javadoc-api / org / springframework / core / env / JOptCommandLinePropertySource.html (Implementasi JOpt dengan fungsi yang sama). Keuntungan di Spring adalah Anda dapat langsung mengikat argumen baris perintah ke atribut, ada contoh di sini https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/core/env/ CommandLinePropertySource.html
sumber