[Java] CLI Options

immanuelk1m·2023년 6월 10일
0

Java

목록 보기
8/9
post-thumbnail

Apache commons CLI

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 상에서 구현한다.

Definition Stage

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
}        

Parsing Stage

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;
    }

Interrogation Stage

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;
        }
}
profile
개발 새발

0개의 댓글