Нотатки програмістера Розбір аргументів командного рядка Java

IT – це чудово!

Розбір аргументів командного рядка у Java

аргументів

Графічний інтерфейс який завжди буває найзручнішим способом взаємодії з програмою. Найчастіше програма, що запускається в командному рядку з деяким набором команд, набагато зручніша в експлуатації. При розробці такої програми постає завдання розбору аргументів її запуску, що саме по собі не завжди буває тривіальним завданням. На щастя, як і більшість інших поширених завдань, завдання розбору аргументів командного рядка вже вирішено у багатьох бібліотеках. У цій статті я коротко опишу дві популярні бібліотеки, в основі яких лежать два, дещо відмінні, підходи до вирішення цього завдання.

Невелике введення

Commons CLI

Кожен парсер реалізує підхід до форматування параметрів із однойменного стандарту. Таке рішення дозволяє легко змінювати підхід до форматування параметрів.

Крім аналізу аргументів рядка запуску, Commons CLI дозволяє генерувати довідку, спираючись на описані параметри:

HelpFormatter досить гнучко налаштовується. Більш повний приклад його використання можна переглянути на офіційному сайті.

На жаль, у Commons CLI не передбачено поняттякоманда, що сильно обмежує можливості цієї бібліотеки.

JCommander

Зверніть увагу, що в цьому рішенні префікси в імені параметра вказуються вручну і вам не вдасться так просто змінити підхід до форматування параметрів. Але насправді кому це треба? :)

Натомість бібліотека підтримує різні типи параметрів. З коробки йдуть як мінімум стандартні типи, як Integer, String і Boolean. І передбачено гнучку систему для розширення цього списку через своїконвертори:

Після цього всі поля, позначені тегом Parameter в об'єкті hgLog, будуть ініціалізовані відповіднимиперевіренимизначеннями з командного рядка.

Найголовніше, що в цій бібліотеці анотації передбачені не тільки для полів класу, а й для самого класу. Анотація Parameters дозволяє оголосити клас, як реалізацію команди, не двозначно закликаючи дотримуватися патерну Команда:

JCommander також дозволяє виводити довідку, але в кастомізації форматування ця бібліотека поступається попередньою: