# Table of Contents

# JAR 파일이란?

JAR(Java Archive)는 자바 애플리캐이션을 효율적으로 배포하기 위해 만들어진 파일이다. JAR파일은 다음 요소들로 구성된다.

  • 클래스 파일
  • 리소스 파일
  • 메니페스트 파일(MANIFEST.MF)

# JAR 생성하기

우선 MyProject폴더를 생성하고 이 폴더로 이동한다.

$ mkdir MyProject

$ cd MyProject

앱의 시작점 역할을 할 MyApp.java를 생성한다.

// MyApp.java

import library.*;

public class MyApp { 
    public static void main(String[] args) { 
        MyLibrary library = new MyLibrary();
        library.printSomething("Something");
    } 
}

library폴더를 생성하고 이 폴더로 이동한다.

$ mkdir library

$ cd library

MyLibrary.java를 생성한다.

// MyLibrary.java

package library;

public class MyLibrary {
    public void printSomething(String something) {
        System.out.println(something);
    }
}

생성된 디렉토리의 구조는 다음과 같다.

$ tree
.
├── MyApp.java
└── library
    └── MyLibrary.java

1 directory, 2 files

MyLibraryMyApp를 각각 컴파일한다.

$ javac library/MyLibrary.java 
$ javac MyApp.java

jar 파일을 생성하려면 MANIFEST.MF 파일이 필요하다. 이 파일에는 앱의 시작점 역할을 하는 파일, 클래스 파일 등의 정보를 나열한다. 보통 META-INF 폴더에 위치한다.

$ mkdir META-INF
$ cd META-INF
$ touch MANIFEST.MF
<!-- MANIFEST.MF -->
Main-class: MyApp

이제 다음 명령어를 입력하면 MyApp.jar파일로 압축할 수 있다.

$ jar -cvmf META-INF/MANIFEST.MF MyApp.jar MyApp.class library/MyLibrary.class
$ tree
.
├── META-INF
│   └── MANIFEST.MF
├── MyApp.class
├── MyApp.jar
├── MyApp.java
└── library
    ├── MyLibrary.class
    └── MyLibrary.java

# JAR 실행하기

다음 명령어를 입력하면 JAR파일을 실행할 수 있다.

$ java -jar MyApp.jar
something

# JAR 압축 풀기

다음 명령어를 사용하면 압축을 풀 수 있다.

$ jar xvf MyApp.jar