[아시나요?]JAR 파일 만들기 , 이용
패키지는 만들어진 상태 그대로 프로그램에서 사용할 수 있다. 그러나 대부분의 결루 패키지는 JAR파일로 압축하여 이용하게 된다 . 이렇게 압축하여 사용하는 것이 소스를 배포하거나 이용할 때 훨씬 편리하기 때문이다. JAR파일이란 ZIP파일과 같은 압축 파일의 일종인데, 자바에서 기본적으로 지원하는 압축 포맷이 바로 JAR 이다. 사용방법은 다음과 같다.
jar -cvf '압축파일이름' '소스파일이름'
만일 A.class와 B.class 파일을 pre.jar 파일로 압축하기를 원한다면, 콘솔 창에서 다음과 같이 입력하면 된다. 물론 A.class 와 B.class 파일이 위치한 디렉토리에서 실행해야 한다.
jar -cvf 'A.class' 'B.class'
이제 만들어 놓은 패키지를 JAR 파일로 압축해 보자. 패키지를 압축할 때는 디렉토리의 구조도 그대로 압축해야 하기 때문에 다음과 같이 com 디렉토리를 통째로 압축하는 것이 가장 좋은 방법이다.
jar -cvf user.jar com
정상적으로 압축을 실행했다면 현재 디렉토리에 user.jar 파일이 생성되었을 것이다. 이렇게 압축된 패키지를 프로그램에서 이용하려면 CLASSPATH에 이파일의 결로만 설정하면 포한된 모든 패키지와 클래스를 사용할 수 있게 된다.
user.jar 파일의 경로를 CLASSPATH에 추가시켜보면 C:/LIB/user.jar라고 가정하면 CLASSPATH에는 다음과 같은 내용이 추가되어 있어야 한다.
CLASSPATH = .;c:/LIB/user.jar;
CLASSPATH를 설정한 후에는 반드시 콘솔 창을 다시 띄워주기 바란다. 클래스 패스의 설정이 완료되면 외부 패키지를 자바의 기본패키지와 동일한 방법으로 사용할 수 있다.
#패키지 사용시 주의할 점#
import문을 사용할 때 *를 사용하면 패키지 내에 포함되어 있는 모든 클래스를 사용할 수 있지만, 그 패키지 내에 존재하는 다른 패키지는 사용할 수 없다. 다음 그림은 실제 자바에서 사용되는 util 패키지의 일부분이다.
ZipFile 클래스와 JarFile 클래스는 구조상 java.util 패키지에 포함되는 것처럼 보이지만, 사실상 이들은 완전히 별개의 패키지로 구분된다. 그래서 import java.util.*; 을 이용해도 Date 클래스만 사용이 가능하고 ZipFile 과 JarFile 클래스는 사용할 수 없다. 이들을 사용하기 위해서는 같은 패키지로 모두 import 해 주어야 한다.
import java.util.*;
import java.util.zip.*;
import java.util.jar.*;
pulic class Test{
public void method() throws Exeption{
Date date = new Date();
ZipFile file1 = new ZipFile("testFile.zip");
JarFile file2 = new JarFile("testFile.jar");
}
}
또 한가지 주의할 점은 각기 다른 패키지에 포함되어 있는 동일한 이름의 클래스를 사용할 때이다. 실제로 자바의 Date 클래스는 java.util.Date 와 java.sql.Date의 두 가지 종류가 존재한다. 물론 이 둘은 전혀 다른 클래스이다. 만일 이 둘 둥에 어느 하나의 패키지만 import 되어 있다면 아무 문제도 발생하지 않지만, 두 패키지가 모두 import되어 있다면 Date 클래스를 사용할 때 문제가 발생한다.
import java.util.*;
import java.sql.*;
public class Test{
public Test{
Date date = new Date(); //에러
}
}
소스에서 사용된 Date 클래스가 어떤 패키지에 포함되어 있는 클래스인지 컴파일러는 판단할 수가 없다. 이럴 땐 명시적으로 패키지의 이름을 클래스의 이름과 함게 사용해야만 한다.
import java.util.*;
import java.sql.*;
public class Test{
public Test{
java.util.Date date = new java.util.Date(); //정상
}
}