위의 그림 처럼 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);
}
}
'JAVA' 카테고리의 다른 글
[ JAVA ] According to TLD or attribute directive in tag file, attribute test does not accept any expressions (0) | 2012.08.03 |
---|---|
[ JAVA ] Socket 의 timeout 설정 (0) | 2012.07.20 |
[ JAVA ] Unsupported major.minor version xx (0) | 2012.06.13 |
[ JAVA ] 자바 property 파일 위치 찾는 법 과 사용법 2 (0) | 2012.04.05 |
[ JAVA ] netty (비동기 이벤트 방식 네트워크 프레임워크) 사용법 2 ( client ) (0) | 2012.04.04 |
댓글