자세한 내용은 아래 링크를 클릭하세요. :)
http://www.ibm.com/developerworks/kr/library/j-5things6.html

[요약 내용]
 대부분의 Java 개발자에게 JAR 파일은 단순히 장기적인 Ant 또는 Maven 프로세스의 최종 결과에 불과하다. 일반적으로 JAR을 서버의 올바른 위치에 복사한 다음 잊어버린다. 하지만 JAR 파일은 소스 코드를 저장하는 것 이상의 작업을 수행할 수 있다.

1. JAR은 실행 파일이다.

 애플리케이션 실행 시, Java 프로그래밍에서는 java가 JVM을 프로세스로 부트스트랩하고, 사용자가 실행할 main() 메소드가 있는 클래스를 나타내는 명령행 인수(com.tedneward.Hello)를 전달해야 한다. 이러한 추가 단계로 인해 Java에서는 사용자 친화적인 애플리케이션을 작성하기가 더 어렵다. 즉, 일반 사용자가 이러한 모든 요소를 명령행에 입력해야 한다.
 이 문제를 해결하는 방법은 JAR 파일을 "실행 파일"로 만드는 것이다. 즉, Java 실행 프로그램이 JAR 파일을 실행할 때 시작할 클래스를 자동으로 인식할 수 있도록 만들면 된다. 이를 위해서는 다음과 같이 JAR 파일의 매니페스트(JAR의 META-INF 서브디렉토리에 있는 MANIFEST.MF)에 항목을 추가하면 된다.


2. JAR은 종속성 정보를 포함할 수 있다.

 
 실행 프로그램에 대한 -jar 옵션은 -classpath 명령행 옵션의 내용을 겹쳐쓰기 때문에 이 코드를 실행할 때 Spring이 CLASSPATH 환경 변수에 있어야 한다. 다행스럽게도 JAR에서는 매니페스트에 표시할 다른 JAR 종속성을 선언할 수 있다. 이렇게 하면 사용자가 선언하지 않아도 CLASSPATH가 암묵적으로 작성된다. Class-Path 속성에는 애플리케이션에서 사용하는 JAR 파일에 대한 상대 참조가 있다. 이 참조는 절대 참조로 작성하거나 접두부 없이 작성할 수 있으며, 이 경우 JAR 파일은 애플리케이션 JAR과 같은 디렉토리에 있는 것으로 간주된다.


3. JAR은 암묵적으로 참조될 수 있다.

 
 Java 런타임에서 JAR에 대한 공통 위치로 사용하는 "확장 디렉토리"는 기본적으로 설치된 JRE 경로 아래의 lib/ext 서브디렉토리에 있다. JRE는 사용자 정의할 수 있는 위치이지만 지정된 Java 환경 내에서 사용자 정의되는 경우가 거의 없기 때문에 lib/ext가 JAR을 저장하기에 안전한 위치이고 Java 환경의 CLASSPATH에서 JAR을 암묵적으로 사용할 수 있다고 생각해도 무방하다.


4. JAVA 6에서는 클래스 경로 와일드카드를 사용할 수 있다.

 

 CLASSPATH 환경 변수와 명령행 -classpath 매개변수가 많아지는 것을 피하기 위해 Java 6에서는 클래스 경로 와일드카드라는 개념이 도입되었다. 클래스 경로 와일드카드를 사용하면 인수에 명시적으로 나열된 모든 JAR 파일을 하나하나 실행할 필요 없이 lib/*와 해당 디렉토리에 나열된 모든 JAR 파일(재귀적이지 않음)을 클래스 경로에 지정할 수 있다.


5. JAR에는 코드 이상의 것이 담겨 있다.

 일부 구성 파일은 시스템 관리자가 편집할 수 있지만 하이버네이트 맵핑과 같은 상당 수의 구성 파일은 시스템 관리자 도메인의 외부에 있기 때문에 배치 작업 중에 발생하는 문제의 원인이 되고 있다. 합리적인 해결 방법은 구성 파일과 코드를 함께 패키지하는 것이다. 이는 JAR이 기본적으로 외형 상 ZIP 형식으로 되어 있기 때문에 가능한 방법이다. JAR을 빌드할 때 구성 파일을 Ant 태스크나 jar 명령행에 포함시키면 된다.
Posted by 클로버,,