풍부한 라이브러리를 제공하는 것이 Java의 장점 중 하나이다. 그리고 다른 프로그램 또는 OS에서 직접 Java코드를 실행해야 할 경우가 있다. 라이브러리 처럼 말이다. 이때 Java Class를 여러개 묶어서 실행가능한 .jar로 만들어 실행하면 된다.
여러 Class를 하나의 .jar 파일로 만들어 args[ ]를 넘기면서 실행해 결과를 볼 것이다.
1. 예제 코드 만들기
예제 코드를 간단히 만들어 봤다. 간단히 설명을 덧붙이자면, Main 에서 Person 클래스를 사용하고, Person은 args[ ]를 통해 초기화 된다. 그리고 그 결과를 간단히 볼 것이다.
소스코드는 아래와 같다.
a. Main
public class Main {
/*
* arg[0]: personName(String)
* arg[1]: personJob(String)
* arg[2]: personAge(int)
*/
public static void main(String args[]) {
Person p1 = new Person(args[0], args[1], Integer.parseInt(args[2]));
System.out.println("{name:"+p1.getName()+",job:"+p1.getJob()+",age:"+p1.getAge()+"}");
}
}
b. Person
class Person {
String pName;
String pJob;
int pAge;
Person(String pName, String pJob, int pAge) {
this.pName = pName;
this.pJob = pJob;
this.pAge = pAge;
}
String getName() {
return this.pName;
}
String getJob() {
return this.pJob;
}
int getAge() {
return this.pAge;
}
}
2. eclipse로 .jar 만들기
Eclipse 에서...
[File] => [Export...] => JAR file 선택 후 Next
=> .jar에 포함시킬 .java파일 모두 선택
=> 파일이 생성될 곳 지정
=> [next]
=> [next]
Main class를 반드시 지정해주고 => [finish]
그러면 .jar가 생성된다.
3. output.jar 실행해보기
output.jar이 있는 폴더에서 cmd를 연다.
그리고 다음과 같이 명령어를 실행하면 된다.
참고로, args[ ]는 java 실행시 넘겨받게되는 String 배열 값들이다. 배열은 보통 공백으로 구분된다.
여기서, args[0]: kay, args[1]: sw_engineer, args[2]: 28 이다.
$ java -jar output.jar kay sw_engineer 28
예상했던 결과가 나왔다.
4. 응용하기
이 방법으로 Java로 만들어진 라이브러리가 다른 언어에서 필요할 때 사용될 수 있지 않을까? 예를 들어 PHP에서 Java로 된 라이브러리를 사용해보자.
이번 Java library 는... php 상에서 이름, 직업, 나이를 넣으면 json 형으로 리턴되는 library 라 가정하자.
a. jar1.php
.jar 을 실행시킬 php 파일을 하나 만든다.
$sudo vi jar1.php
<?php
$str = jsonfy("han", "officer", "27");
echo $str;
echo "\n";
function jsonfy($name, $job, $age) {
//$result = passthru("java -jar output.jar ".$name." ".$job." ".$age);
$result = exec("java -jar output.jar ".$name." ".$job." ".$age);
return $result;
}
?>
- exec(): php에서 외부 실행을 할때 사용된다. 결과는 마지막 1줄만 얻게된다.
- passthue(): exec와 마찬가지로 외부 실행을 할때 사용되나, 결과를 모든 라인 받는다.
여기서 1줄만 받으면 되므로, exec()를 사용한다.
b. 결과
엄밀히 결과는 사실 String 값이지만, json형으로 바꾸는 것은 간단하니... 문제가 없을듯하다.
여튼, php 에서 java library를 이런식으로 사용하면 될 것 같다.