- by fendee
- 2009/03/07 16:32
- fendee.egloos.com/9023202
- 덧글수 : 0
여러개의 파일을 하나로 모아 압축한 것을 아카이브(ARchive) 라고 한다.
JAR 는 복수의 클래스 파일과 그 밖의 파일을 하나로 모아 압축한 파일 형식이다.
파일들을 모아 압축을 통해 용량을 줄일 수 있기 때문에 데이터를 교환하기에 편리하다.
일반적으로 자바 프로그래밍을 하다보면 jar 파일을 심심찮게 볼 수 있는데,
압축파일이기 때문에 알집 같은 압축,해제 프로그램으로 풀 수 있다.
즉, 다른 의미로 해석하자면, 굳이 jar 커맨드를 이용하지 않아도, 일반 압축 프로그램에서
jar 파일을 생성할 수 있다는 의미이다.
알집의 경우, 압축은 가능한데, 압축을 해제하기 전에 미리보기 하는 기능은 되지 않았다.
○ JAR 커맨드(명령)
JAR 파일은 명령 프롬프트에서 jar 커맨드(명령)를 사용하여 만들어 낼 수 있다.
jar 커맨드는 'jar' 뒤에 다음과 같은 옵션을 붙여서 사용한다.
옵션 : 설명
c : 새 아카이브를 만든다.
t : 아카이브의 내용을 표시한다. //일반적으로 내용을 볼때는 t 옵션만 사용하지 않고, tf 옵션으로 한다.
x : 아카이브에서 파일을 추출한다.
u : 기존의 아카이브를 업데이트 한다.
v : 명령 프롬프트에상세정보를 표시한다.
f : 아카이브 파일 이름을 지정한다.
m : manifest 정보를 포함시킨다.
o : 저장만 수행하며 ZIP 압축을 사용하지 않는다.
M : manifest 파일을 만들지 않는다.
i : 지정된 jar 파일에 대한 색인 정보를 생성한다.
C : 지정된 디렉토리로 변경하고, 다음 파일을 포함시킨다.
jar 옵션에 대한 사용법을 다시 살펴보면
--------------------------------------------------
사용법: jar {ctxu}[vfm0Mi] [jar-file] [manifest-file] [-C dir] files ...
옵션:
-c 새 아카이브를 만듭니다.
-t 아카이브에 대한 목차를 나열합니다.
-x 아카이브에서 명명된 (또는 모든) 파일을 추출합니다.
-u 기존의 아카이브를 업데이트합니다.
-v 표준 출력에 대한 자세한 정보 출력을 생성합니다.
-f 아카이브 파일 이름을 지정합니다.
-m 지정된 manifest 파일에서 manifest 정보를 포함시킵니다.
-0 저장만 수행하며 ZIP 압축을 사용하지 않습니다.
-M 입력 항목에 대한 manifest 파일을 만들지 않습니다.
-i 지정된 jar 파일에 대한 색인 정보를 생성합니다.
-C 지정된 디렉토리로 변경하고 다음 파일을 포함시킵니다.
디렉토리인 파일이 하나ㅏ도 있으면 재귀적으로 처리됩니다.
'm' 및 'f' 플래그가 지정된 순서대로 manifest 파일 이름과 아카이브 파일 이름을 지정해야 합니다.
예 1: classes.jar 라는 아카이브 파일에 두 클래스 파일을 아카이브하려면
jar cvf classes.jar Foo.class Bar.class
dP 2: 기존의 manifest 파일 'mymanifest' 를 사용하고 foo/ 디렉토리에 있는
모든 파일을 'classes.jar' 로 아카이브합니다.
jar cvfm classes.jar mymanifest -C foo/ .
--------------------------------------------------
책에서는 o 옵션이 애매하게 표시되어 있는데,
명령 프롬프트 상에서 설명해주는 명령어는 영어 o 소문자가 아니라 숫자 0 이다.
간단한 작업을 할때는 한가지 옵션만을 사용하겠지만,
복잡한 명령을 수행할때는 명령 옵션을 조합해서 사용하는데,
만약, 파일 A.class, B.class 두개의 파일을 신규 작성한 AB.jar 에 저장하려 한다면,
>jar cf AB.jar A.class B.class
라고 한다.
cf 옵션이 두개의 옵션을 조합해서 사용하는 명령인데,
새로 만드는 옵션인 c 와 지정한 파일명을 사용하는 f 를 조합한 것이다.
그래서, AB.jar 라는 지정된 파일명으로 새로 만들고, 그 안에 A.class 와 B.class 두개를 포함시키는 것이다.
JAR 파일에 들어갈 파일명은 공백으로 구분해준다.
만약, JAR 파일 AB.jar 에 저장되어 있는 파일의 내용을 표시하려면,
>jar tf AB.jar
라고 한다.
여기서 t 옵션은 내용을 표시하도록 하는 옵션이고, f 옵션은 지정된 파일명을 의미한다.
이 옵션을 이용하면, 윈도우 탐색기에서 폴더트리를 보여주듯이,
jar 파일안에 어떠한 파일들이 들어있는지 경로와 파일명들을 보여준다.
○ 매니페스트(manifest) 파일
매니페스트 파일은 JAR 파일에 들어 있는 파일의 정보를 기술한 파일이다.
매니페스트 파일을 지정하지 않고 아카이브를 생성하게 되면, 표준 매니페스트 파일이 포함된다.
아래와 같은 내용의 매니페스트 파일을 작성하고, JAR 파일에 포함시켜두면, JAR 파일을 직접 실행할 수 가 있다.
main-class: A
실행하고 싶은 클래스명을 적어주는 것이다.
클래스명을 적을때는, 클래스명 앞에서는 스페이스가 반드시 있어야 하며,
뒤에는 개행문자가 필요하다.
○ JAR 파일의 실행
압축을 해제하지 않은 상태에서 바로 실행할 수 있는 JAR 파일을 작성하려면 다음과 같이 기술한다.
(Hello.java)----------------------
class Hello{
void hello(){
System.out.println("Hello");
}
}
----------------------------------
(Bye.java)------------------------
class Bye{
void bye(){
System.out.println("Bye");
}
}
----------------------------------
(a.java)--------------------------
class a{
public static void main(String [] args){
Hello h = new Hello();
Bye b = new Bye();
h.hello();
b.bye();
}
}
----------------------------------
이렇게 소스를 작성한뒤 컴파일을 한다.
실행할 클래스명을 기술한 manifest.txt 라는 이름의 매니페스트 파일을 만든다.
Main-class: a
그런다음, JAR 파일에 매니페스트 파일을 포함하여 클래스 파일을 저장한다.
>jar cfm G.jar manifest.txt Hello.class Bye.class a.class
여기서, cfm 옵션은 지정한 파일이름(f)으로 새로 생성(c)하면서 매니페스트 파일을 포함(m)하는 것이다.
Jar 파일을 실행할때는 -jar 을 이용하는데, 아래와 같이 기술하면 된다.
-------------------
>java -jar G.jar
Hello
Bye
-------------------
즉, jar 파일로 압축하면서 매니페스트파일에 어떤 클래스를 시작클래스로 할것인지 지정하였기 때문에,
a.class 가 시작되며, a.class 에서는 마치 패키지에서 다른 클래스들을 포함시켜서 사용하듯이,
Hello.class 와 Bye.class 의 클래스들을 불러와써 쓸 수 있는 것이다.
첨부파일: jar_make_run.zip
본 블로그는 페이스북 댓글을 지원합니다.