모든 언어를 시작하면 대부분 처음 만나는 샘플 코드는 'hello world'를 출력하는 것입니다. (요즘 들어서는 다른 색다른 문구를 사용하기도 하지만 'hello world'의 명성은 여전합니다.)

java로 프로그램 하시는 분들이 가장 먼저 만나던 구문역시 비슷할 거라고 생각합니다.
System.out.println("hello word");
저 역시 그랬습니다. ^^

xxx.java로 소스코드를 저장하고 javac를 이용해서 컴파일하고 컴파일 이후에 생긴 xxx.class를
> java xxx
라는 명령어로 실행시키면 화면에
> hello world
가 출력되는 것을 보실 수가 있습니다.
네.. 대부분의 java 초급 프로그램 책들은 이렇게 시작될 거라고 생각합니다. (환결설정, java설명을 포함하여)

이러한 .class파일을 .jar로 묶어서 실행시키는 방법도 있습니다.
.jar 파일은 java를 공부하면서 라이브러러를 사용해야 하는 상황에서 한번쯤은 만나보셨을 겁니다.
보통 라이브러리를 배포할때 .jar형태로 배포하고 jar파일이 있는 곳을 classpath에 추가하여 개발을 합니다.
그래서 대부분은 .jar파일이 라이브러리만 가지고 있는 형태이고 직접적으로 실행이 될 수는 없다고 생각합니다.
하지만 manifest를 이용하시면 .jar파일을 실행시키실 수 있습니다.
물론 main 메소드를 가지고 있는 class파일을 만드셔야 합니다.

가장 간단한 소스로 가장 간단하게 만들어보겠습니다.
제가 사용한 디렉토리 구조는 다음과 같습니다.
jarTest/bin
jarTest/classes
jarTest/src
이름만 보셔도 어떤 녀석들이 들어갈지 짐작이 가시죠^^

src 디렉토리 밑으로 디렉토를 좀 더 만들었습니다. 패키지를 사용할 생각합니다.
파일 이름은 'ExeJarFile.java'로 만들었습니다.
src/geminidream/exejar/ExeJarFile.java

ExeJarFile.java

package  geminidream.exejar;

public class ExeJarFile{
 
 public static void main(String[] args){
  System.out.println("this is exe jar file test");
 }
}


화면에 'this is exe jar file test'를 출력하는 간단한 소스입니다.
이제 이 소스를 컴파일 합니다. 위치는
> pwd => jarTest
입니다.

> javac -classpath classes:. -d classes src/geminidream/exejar/ExeJarFile.java
정상적으로 컴파일 된다면 classes/geminidream/exejar/ExeJarFile.class파일이 존재하게 됩니다.

잘 작동하는지 실행시켜 보죠
> pwd => jarTest/classes
> java -classpath . geminidream/exejar/ExeJarFile
> this is exe jar file test
정삭적으로 작동하는 것을 확인하셨다면 이제 manifest파일을 만들면 됩니다.
위치는 'jarTest/classes/manifest.txt'으로 하였습니다.

> cat manifest.txt
Manifest-Version: 1.0
Sealed: true
Main-Class: geminidream.exejar.ExeJarFile
Class-Path: .


main 메소드가 어느 class에 있는지 변경해주시고 class-path가 필요하시다면 설정하시면 됩니다.
. /lib/log4j.jar /lib/jdbc.jar 와 같이 공백을 사용하시면 됩니다.

이제 클레스를 jar파일로 묶습니다. 위치는
> pwd => jarTest/classes
입니다.
> jar -cvmf manifest.txt ../bin/exeJarFile.jar geminidream
> 추가된 manifest
> 추가 중: geminidream/(내부 = 0) (외부= 0)(0%가 저장되었습니다.)
> 추가 중: geminidream/exejar/(내부 = 0) (외부= 0)(0%가 저장되었습니다.)
> 추가 중: geminidream/exejar/ExeJarFile.class(내부 = 458) (외부= 312)(31%가 감소되었습니다.)

이제 묶은 jar파일이 잘 실행되는지 확인할 차례만 남았습니다.
> pwd => jarTest/bin
> java -jar exeJarFile.jar
> this is exe jar file test

이상 manifest파일을 이용하여 실행가능한 jar파일 만들기 였습니다. ^^
Posted by 달빛변신
,