어제 .jar 파일의 repack 작업을 하면서 jar 명령어에 대해 정리할 필요가 있었다. 아무래도 각자 다른 개발환경 아래의 컴퓨터를 서로 다른 사람들이 사용하고 있으니 같은 명령어라도 다른 결과물이 나온다는 생각이 들었기 때문이다. 이제 무조건 [Ctrl] + [C] & [Ctrl] + [V] 하기 보다는 과정 하나하나를 이해하려고 노력해야지. 우선은 jar 부터 시작하자.

  먼저 .jar file 자체의 정의를 보니 Java platform에서 app과 같은 응용 프로그램이나 library로 사용할 수 있도록 여러 파일을 묶어 놓은 패키지(packaging) file format으로, 일종의 .zip과 같은 파일 묶음과 같은 것이었다. 그렇다 보니 지난 번에 참조했던 조언과 같이 unzip 명령이 jar file을 풀 수 있었던 모양이다.

"JAR(Java Archive, 자바 아카이브)는 소프트웨어에서 수많은 자바 클래스 파일과 연관 메타데이터, 리소스(텍스트, 그림 등)을 하나의 파일로 모아서 자바 플랫폼응용 소프트웨어라이브러리를 배포하기 위한 패키지 파일 포맷이다.[1]

  JAR 파일은 실제로 ZIP 파일 포맷으로 이루어진 압축 파일로서, 파일 확장자는 .jar이다. 컴퓨터 사용자들은 JDK에 포함된 jar 명령어를 이용하여 JAR 파일을 만들거나 압축을 풀 수 있다. 또, zip 도구를 사용할 수도 있으나 압축 시에는 매니페스트 파일이 처음이어야 하는 경우가 있어서 zip 파일 헤더의 엔트리 순서가 중요하다. JAR 안에서 파일 이름들은 유니코드 텍스트로 되어 있다."

[참고] Wikipedia - https://ko.wikipedia.org/wiki/JAR_(%ED%8C%8C%EC%9D%BC_%ED%8F%AC%EB%A7%B7)

 

  이렇다 보니 .jar file을 사용하고 또 생성하기 위해서는 Java platform 환경이 갖추어져 있어야 하는데, 그것이 JDK(Java Development Kit)이다. 요즘은 인터넷을 활용하는데도 Java platform이 필요하다보니 웬만해서는 다 설치되어 있겠지만, 혹시나 깔끔하게 다시 설치해야 한다면 Oracle 홈페이지 내 Java SE Development Kit를 download하여 설치하면 되겠다(2015년 11월 27일 현재 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 에 방문하면 Java SE Development Kit 8u65/8u66 을 Linux나 Windows 32-bit(x86)/64-bit(x64)와 같은 사용자의 사용 환경에 맞춰 설치할 수 있다).

 

  이렇게 설치하고 나면, 해당 JDK를 사용자가 어느 위치에서나 편하게 활용할 수 있게끔 환경변수를 설정해 주어야 하는데 Windows 7 기준으로 1) [시작] - [컴퓨터] 오른쪽 클릭해 메뉴 도출 - [속성] 순으로 접근하던가 2) [제어판] - [시스템] 순으로 들어가면 나타나는 창에서 왼쪽 상단의 메뉴 중 맨 끝에 있는 [고급 시스템 설정]을 클릭해 [시스템 속성 - 고급 탭] 을 띄워 창 하단의 [환경 변수] 버튼을 클릭, 그리고 path(혹은 Path, PATH)변수에 java.exe에 접근할 수 있도록 (컴퓨터 내 jdk 설치 directory)\bin을 추가한다(혹은 추가되었는지 확인한다). 혹시 이 과정이 귀찮다면 java.exe가 설치되어 있는 폴더 내에서 jar 명령어를 동작시키면 되긴 했는데, 환경변수를 설정하는 쪽이 추후에 더 편리했다.

   

 

  이제 console(ex. cmd)을 띄워, jar 명령어를 다음과 같이 활용한다. 기본적으로 jar {ctxu}[vfm0M] (jar file name).jar (대상이 되는 directory name) (.jar file이 생성되는 지점)으로 구성되는데 주로 중괄호 {}에 해당하는 명령어가 c이면 jar 압축, x이면 jar 압축 해제, 대괄호 []에 해당하는 명령어로 v와 조합할 경우 해당 c 또는 x 명령 수행 과정을 console에 나타내며, f의 경우 해당 manifest를 포함함을 의미한다.

jar {ctxu}[vfm0M] [jar-file] [manifest-file] [-C dir or files] ...

 

  1) {ctxu} 필수 option
    - c : archive 파일(.jar file)을 생성
    - t : [jar-file]에 해당하는 archive file의 content list를 설정
    - x : 뒤에 [jar-file]에 해당하는 archive 파일(.jar file)의 압축 해제
    - u : [jar-file]에 해당하는 archive 파일 내에 들어있는 파일을 수정

  2) [vfm0M] 앞의 {ctxu}의 동작을 도와주는 option
    - v : console 창으로 진행 사항에 관한 메시지를 모두 출력. 안 쓸 경우, 중요 error message만 console 창에 뿌려주었다.
    - f : archive 될 파일 이름을 지정
    - m : manifest 파일로부터 정보를 포함
    - 0 : 저장(묶기)만 하고, zip으로 압축지 않음
    - M : 추가되는 entry에 대해 manifest 파일을 생성하지 않음

  3) [jar-file] archive 대상이 되는 .jar file의 이름

  4) [manifest-file] 정보를 포함할 manifest file의 이름

  5) [-C dir or files] archive 할 directory 명 혹은 file 명. 명기한 순서대로 처리.

 

  (사용 예시) 

 

+ Recent posts