Antarmuka baris perintah Java: picocli

Halo semuanya!

Awal berikutnya dari grup Pengembang Java , di mana kita semua melanjutkan percobaan kami dari fakta bahwa proses pembelajaran tidak harus berkelanjutan ("Haruskah kontroversi berlanjut?"). Artinya, kami sedikit mengerjakan ulang dan mengacak program, dan membaginya menjadi tiga langkah, yang dapat dengan mudah dilewati dengan jeda di antara mereka. Secara umum, ini menarik bagi siswa dan bagi kita, jika saja tidak ada yang lembab, jika tidak, program itu bahkan akan tampak sedikit lebih rumit, walaupun itu tidak mudah sebelum itu. Nah, artikel yang secara tradisional menarik terkait dengan kursus kami.

Ayo pergi!



Di situs web resmi, picocli digambarkan sebagai "antarmuka baris perintah kecil yang kuat", yang "merupakan kerangka Java satu file untuk mem-parsing argumen baris perintah dan membuat pesan pembantu yang sempurna dan mudah disesuaikan. Dengan bunga. " Posting ini memberikan gambaran singkat tentang Picocli 0.9.7 dan penggunaannya untuk parsing argumen command-line dalam kode Java.

Seperti pustaka pemrosesan baris perintah Java lainnya yang dijelaskan dalam seri ini, picocli adalah open source . Karena semua picocli diimplementasikan dalam satu file Java , Anda dapat dengan mudah menggunakan kode sumber secara langsung jika diinginkan. Situs picocli menekankan bahwa "fitur khas dari picocli adalah bahwa ia memungkinkan pengguna untuk menjalankan aplikasi yang menggunakan picocli tanpa memerlukan picocli sendiri sebagai ketergantungan eksternal: semua kode sumber terletak dalam satu file untuk mendorong penulis aplikasi untuk memasukkannya dalam kode sumber program" . Jika Anda memilih untuk menggunakan picocli sebagai perpustakaan, di Maven Repository memiliki JAR-file yang dengan set file dikompilasi .class (picocli merupakan satu Java-file, namun mengandung banyak sub-kelas dan penjelasan s).

Cara termudah untuk mendapatkan gagasan tentang sifat file tunggal Picocli adalah dengan melihat file itu sendiri. Kode sumber untuk CommandLine.java tersedia di halaman unduhan Picocli . Dua tangkapan layar berikut menunjukkan output dari javap ketika mengeksekusi kelas CommandLine dan ketika mengeksekusi salah satu anotasi internal dan salah satu kelas internalnya.





Terlepas dari apakah kita mengkompilasi CommandLine.java ke file kelas / JAR kita sendiri atau menggunakan JAR yang sudah dibangun dari Maven, kode sumber aplikasi menggunakan Picocli jelas akan sama. Fase “determinasi” dalam argumen parsing menggunakan Picocli dilakukan dengan memberi anotasi pada bidang instance yang akan menyimpan nilai yang terkait dengan parameter baris perintah. Ini ditunjukkan dalam cuplikan kode di bawah ini.

Tahap “Definisi” Picocli
/*     Java   picocli. */ @Command( name="Main", description="Demonstrating picocli", headerHeading="Demonstration Usage:%n%n") public class Main { @Option(names={"-v", "--verbose"}, description="Verbose output?") private boolean verbose; @Option(names={"-f", "--file"}, description="Path and name of file", required=true) private String fileName; @Option(names={"-h", "--help"}, description="Display help/usage.", help=true) boolean help; 

Contoh kode di atas menunjukkan bahwa Picocli memungkinkan Anda menentukan beberapa nama bendera (dalam contoh saya, nama karakter tunggal dengan satu tanda hubung dan nama multi karakter dengan dua tanda hubung). Contoh ini juga menunjukkan bahwa diperlukan = true dapat diatur untuk parameter yang diperlukan, dan bantuan = true dapat ditentukan untuk opsi tambahan , seperti mencetak detail penggunaan dan menghilangkan kesalahan terkait dengan tidak adanya parameter yang diperlukan. Perhatikan bahwa Picocli 0.9.8 menambahkan dukungan tambahan untuk jenis pesan pembantu yang lebih spesifik, versiHelp dan useHelp .

Tahap "parsing" di Picocli dilakukan di CommandLine.populateCommand (T, String ...) , di mana T adalah turunan dari kelas dengan bidang yang diberi catatan Picocli, dan baris yang tersisa adalah argumen yang perlu dianalisis. Ini ditunjukkan dalam cuplikan kode berikut.
Fase penguraian Picocli

 final Main main = CommandLine.populateCommand(new Main(), arguments); 

Tahap "polling" di Picocli terdiri dari hanya mengakses bidang yang diberi catatan Picocli dari instance yang diteruskan ke metode CommandLine.populateCommand (T, String ...) pada tahap "parsing". Contoh sederhana dari "survei" tersebut ditunjukkan dalam daftar berikut.

Fase Survei Picocli

 out.println( "The provided file path and name is " + main.fileName + " and verbosity is set to " + main.verbose); 

Menampilkan pesan tambahan atau informasi penggunaan kepada pengguna ketika -h atau --help ditentukan pada baris perintah sesederhana "polling" bidang Picocli-annotated yang bantuan = true ditentukan untuk menentukan apakah nilai boolean ini ditetapkan atau tidak dan, jika diinstal, panggil salah satu metode CommandLine.usage yang kelebihan beban. Saya harus menggunakan salah satu versi statis dari metode ini, seperti yang ditunjukkan dalam daftar berikut.

Pesan Dukungan / Informasi Penggunaan di Picocli

 if (main.help) { CommandLine.usage(main, out, CommandLine.Help.Ansi.AUTO); } 

Beberapa tangkapan layar berikut menunjukkan aplikasi sederhana yang ditulis menggunakan picocli. Tangkapan layar pertama menunjukkan jenis pesan kesalahan dan jejak tumpukan jika bendera yang diperlukan tidak ada. Tangkapan layar kedua menunjukkan bagaimana nama panjang dan pendek yang ditentukan dalam anotasi digunakan. Gambar ketiga menunjukkan fungsi menampilkan pesan tambahan dalam aksi.





Salah satu fitur tambahan Picocli, yang tidak tersedia di banyak perpustakaan parsing argumen baris perintah Java lainnya, adalah dukungan untuk sintaks warna a. Daftar pertama posting ini memiliki garis yang ditentukan dalam anotasi dengan @ | | @ sintaks. Pada tangkapan layar di atas, yang menunjukkan penggunaan pesan tambahan, karakter-karakter ini ditransmisikan apa adanya, tanpa pemrosesan khusus. Namun, jika saya menjalankan kode sampel ini di Cygwin, saya akan melihat apa yang dilakukan tanda-tanda ini.



Pada tangkapan layar di atas, kita melihat bahwa Picocli secara otomatis menerapkan sintaks warna (kuning dan putih) ke opsi pesan tambahan dan juga menerapkan sintaks tebal dan bergaris bawah ke area dengan deskripsi pesan tambahan di mana sintaks @ | diterapkan | @.

Berikut ini adalah fitur Picocli tambahan untuk dipertimbangkan ketika memilih kerangka kerja atau pustaka untuk membantu parsing argumen baris perintah di Jawa.

  • Picocli adalah proyek sumber terbuka yang dilisensikan dengan Apache 2.0.
  • Picocli tidak perlu mengunduh pustaka atau kerangka kerja pihak ketiga.
  • Semua kode sumber Picocli terkandung dalam satu file .java, dan kode ini dapat disalin dan ditempelkan ke sistem manajemen konfigurasi sendiri dan dikompilasi dengan sisa kode aplikasi, yang berarti bahwa bahkan file JAR Picocli tidak diperlukan.
  • File sumber CommandLine.java (Picocli 0.9.7) hanya lebih dari 3.700 baris (termasuk spasi dan komentar) dan beratnya hampir 200 KB. File picocli-0.9.7.jar memiliki berat sekitar 83 KB.
  • Picocli tepat waktu dan sering diperbarui. Versi 0.9.8 dirilis kemarin (setelah saya menulis sebagian besar posting ini).
  • Picocli memiliki dokumentasi yang sangat terperinci dan dalam banyak hal lebih mutakhir daripada dokumentasi untuk beberapa pustaka pemrosesan baris perintah Java lainnya.
  • Dukungan sintaks warna Picocli mudah digunakan, dan bantuan tentang penggunaan sintaks warna lintas platform didokumentasikan di bagian Platform yang Didukung .
  • Menggunakan anotasi Picocli untuk bidang level contoh mirip dengan menggunakan anotasi di beberapa pustaka pemroses baris perintah lainnya dan memiliki manfaat yang sama.
  • Fitur utama Picocli sangat mudah dan mudah dipelajari, tetapi Picocli juga mendukung kemampuan untuk mengkonfigurasi beberapa aspek pemrosesan baris perintah menggunakan Picocli.

Daftar dalam posting ini sepenuhnya tersedia di GitHub .

Picocli adalah pustaka yang didukung dan diperbarui untuk mem-parsing argumen baris perintah Java. Ini berisi beberapa fitur dan pendekatan baru dari beberapa pustaka pemrosesan baris perintah yang tersedia yang ditulis dalam Java, tetapi beberapa fitur berbeda telah ditambahkan ke dalamnya (seperti sintaks warna dan seluruh pustaka yang dienkapsulasi dalam satu file Java sumber). Picocli cukup mudah digunakan dan menarik dalam dirinya sendiri, tetapi kemungkinan besar itu akan menonjol di antara perpustakaan lain untuk pengembang individu jika pengembang ini ingin mendukung sintaks warna atau kemampuan untuk menambahkan file kode sumber ke proyek pengembang tanpa tambahan file JAR atau yang dikompilasi. file kelas.

AKHIR

Seperti biasa, kami menunggu pertanyaan dan komentar Anda.

Source: https://habr.com/ru/post/id419401/


All Articles