본문 바로가기
JAVA

[ JAVA ] apache commons cli ( command line interface )

by 정윤재 2012. 6. 27.

 

 

 

위의 그림 처럼 command line 에서 실행 하는 application (여기서의 예는 java) 은 프로그램을

 

실행 시키려고 했을 때 -h 또는 --help 같이 도움말을 주거나 정상적인 옵션을 않넣었을 때

 

사용법을 안내 해 줄 수 있다.

 

그런데 java 프로그램을 그런 식으로 만들려고 하면 쉘에서 조작을 해주거나

 

자바에서 볼품 없이 argument String 배열을 가지고 조작을 해주어야 한다.

 

하지만 아래와 같이 자바 프로그램을 만들 어 준다면 위와 같은 방식의 처리가 쉽게 되며

 

옵션이 들어왔을 때 자바 어플리케이션상에서 처리도 깔끔히 분기 시킬 수 있다.

 

 


//목적
//java cli.CliTest -p aaa 를 실행 할 경우
//aaa 를 출력 함

//java cli.CliTest -h 를 실행 할 경우

//프로그램 실행 방법 출력 함

 

 

package cli;

import java.util.List;

import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.HelpFormatter;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;
import org.apache.commons.cli.PosixParser;

 

public class CliTest {

 private static final Options opts = new Options();


 public static void main(String[] args) {

  CommandLineParser clp = new PosixParser();
  
  CommandLine cline = null;

  
        try{
         opts.addOption("p", "print", true, "입력받은 인자를 프린트합니다.");
      
      //첫번째 p 옵션 : -p aaa  (aaa 를 출력 하는 것)
      //두번째 p 옵션 : --print aaa (aaa 를 출력 하는 것)
      //세번째 true,false : -p 또는 --print  다음에 프린트 할 argument 를 받는다.
      
         opts.addOption("h", "help", false, "도움말을 출력합니다");
         cline = clp.parse(opts, args);
           
        }catch (ParseException e) {
         System.out.println("error");
            usage();
            //에러 발생 하였으므로 사용법을 알려줌
            return;
        }
       
        List list = cline.getArgList();
       
        for(int i=0;i<list.size();i++){
         //argument 로 무엇을 받았는지 확인
         System.out.println("list::"+list.get(i));
        }
       
       
        if (cline.hasOption("p")) {
            System.out.println(cline.getOptionValue("p"));
            //-p 나  --print 옵션이 들어오면 찍히는 곳
           
        }

  
     if (cline.hasOption("h")) {
      //-h 나 --help 옵션이 들어오면 실행 되는 곳
         usage();
     } 
 }
 
    private static void usage() {
        HelpFormatter hf = new HelpFormatter();
        String runProgram = "java "+CliTest.class.getName() + " [options]";
        hf.printHelp(runProgram, opts);
    }

 

}

 

 


댓글