Open source library to make your programs to support various formats of CLI options.
CLI : Command line interface
CLI Option이란 프로그램 상에서 다양한 옵션을 제공하는 오픈소스 라이브러리이다.
Definition Stage / Parsing Stage / Interrogation Stage
3단계를 걸쳐 Java Program 상에서 구현한다.
Create an instance of Options class
Add each option in the options instance
Option Class를 생성 후
해당 Class에 여러 옵션을 추가한다
import org.apache.commons.cli.*;
public Options createOptions()
{
Options options = new Options();
...
options.addOption(Option.builder("t").longOpt("task")
.desc("Set a task. The -t or -i options\n"
+ "must be set as well.")
.hasArg()
.argName("A task name")
.required()
.build());
....
return options
}
implement a logic that parse options typed by users in CLI.
User가 CLI에 입력한 내용들을 OptionHandler 필드에 저장
public boolean parseOptions(Options options, String[] args)
{
CommandLineParser parser = new DefaultParser();
try
{
CommandLine cmd = parser.parse(options, args);
this.dataInputFilePath = cmd.getOptionValue("i");
this.dataOutputFilePath = cmd.getOptionValue("o");
this.inputValues = cmd.getOptionValue("v");
this.task = cmd.getOptionValue("t");
this.helpRequested = cmd.hasOption("h");
}
catch(ParseException e)
{
printHelp(options);
return false;
}
return true;
}
Use the options to implement your logic
각 option들을 논리에 맞게 실행한다
public void run(String[] args)
{
OptionHandler handler = new OptionHandler();
Options options = handler.createOptions();
if(handler.parseOptions(options, args))
{
if (handler.getHelpRequested())
{
handler.printHelp(options);
return;
}
if (handler.getTask() != null)
{
engineName = handler.getTask().toUpperCase();
}
else
{
handler.printHelp(options);
return;
}
...
}
else
{
handler.printHelp(options);
return;
}
}