Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- sorted
- 윈도우즈 원격 데스크톱
- mstsc
- skip-grant
- RESTful java
- DataSource
- list
- error 1418
- JNDI
- python3
- 데스크톱
- 3389
- Blog Code
- error 1298
- nmon
- Python
- RESTful Web Service
- Java Rome
- Chrome REST
- REST API
- Advanced REST client
- SyntaxHighlighter
- Source Code
- RESTful
- error 1045
- Java
- Dictionary
- error 145
- jersey
- JCommander
Archives
- Today
- Total
그래도 개발자일 때 좋았다
JCommander를 통한 JAR 실행 Parameter 관리 본문
Java를 이용해서 JAR를 만든 후에 JAR를 직접 실행할 경우 Parameter를 넣어주어야 되는 경우가 있다. 예를 들어서 아래와 같은 JAR 파일에 Parameter로 무언가를 보낸다고 가정을 해보면,
$ java jar Test.jar param1 param2 param3
위와 같은 방식으로 기본적으로 넘길 수 있을 것이다. 이 경우에는 main 함수에서 대게 args에 대한 처리를 해주어야 한다.
public static void main(String[] arg) {
if (arg.length < 3) {
System.err.println("Usage: java jar Test.jar param1 param2 param3");
System.exit(1);
}
}
하지만 JCommander를 쓸 경우는 이러한 Argument 작업을 더욱 쉽고 직관적으로 할 수 있다.
<properties>
<jcommander.version>1.48</jcommander.version>
</properties>
<dependencies>
<dependency>
<groupId>com.beust</groupId>
<artifactId>jcommander</artifactId>
<version>${jcommander.version}</version>
</dependency>
</dependencies>
예를 들어서 DB 접속을 위해서 host, port, username, password를 실행 Parameter로 받는다고 가정을 해보자.
import com.beust.jcommander.Parameter;
public class DatabaseArgs {
public static final String HELP = "--help";
@Parameter(names = HELP, description = "Display usage information", help = true)
private boolean help;
public boolean getHelp() {
return help;
}
public static final String HOST = "--host";
@Parameter(names = HOST, description = "The endpoint of Database", required = true)
private String host;
public String getHost() {
return Host;
}
public static final String PORT = "--port";
@Parameter(names = PORT, description = "The port of Database", required = true)
private String port;
public String getPort() {
return port;
}
public static final String USERNAME = "--username";
@Parameter(names = USERNAME, description = "The username of Database", required = true)
private String username;
public String getUsername() {
return username;
}
public static final String PASSWORD = "--password";
@Parameter(names = PASSWORD, description = "The password of Database", required = true)
private String password;
public String getPassword() {
return password;
}
}
위와 같이 Class를 생성하면 실행시 "--help" 옵션을 주게 되면 사용법이 자동으로 나오게 된다. Parameter Annotation을 통해서 required로 지정된 Parameter의 경우 필수 옵션이기 때문에 넣지 않게 되면은 Exception이 발생하게 된다.
com.beust.jcommander.ParameterException: The following options are required: --password --username --host --port
Usage: <main class> [options]
Options:
--help
Display usage information
Default: false
* --host
The endpoint of Database
* --password
The password of Database
* --port
The port of Database
* --username
The username of Database
그 다음은 위의 Parameter들을 사용하여 실행하는 Class가 있을 경우 아래와 같이 구현하면 된다.
public static void main(String[] args) {
DatabaseArgs params = new DatabaseArgs();
JCommander cmd = new JCommander(params);
try {
// Parse given arguments
cmd.parse(args);
// Show usage information if help flag exists
if (params.getHelp()) {
cmd.usage();
return;
}
// Get Database information
String host = params.getHost();
String port = params.getPort();
String username = params.getUsername();
String password = params.getPassword();
} catch (ParameterException e) {
JCommander.getConsole().println(e.toString());
cmd.usage();
}
}
위와 같이 Class가 준비되었을 경우 Jar를 실행시 아래와 같이 Parameter를 넘기면 된다.
$ java jar Test.jar --host db.databasehost.com --port 3306 --username myuser --password mypassword
참고:
[1] JCommander: http://jcommander.org/
'Development > Java' 카테고리의 다른 글
Java DNS TTL 관리 (0) | 2018.03.19 |
---|---|
Java Rome Library를 이용한 RSS Feed 수집 (0) | 2017.02.13 |
Simple RESTful Web Services with Jersey (0) | 2012.09.10 |
Comments