[Java] jar파일만들기(Manifest이용)
1️⃣ jar파일이란?
- C언어에서는
라이브러리파일(아카이브) 로 오브젝트파일을 압축시킬 수 있으며실행파일(.exe, .out) 로 만들어 실행할 수 있습니다. - 자바에서는
jar파일 이 C언어에서 라이브러리와 실행파일의 역할을 둘다 하게됩니다. - 엄밀히말하면 jar파일은
압축파일 일뿐입니다.
2️⃣ Manifest를 이용한 jar파일
(1) jar명령어
(2) 테스트파일구조
(3) 테스트파일로 .jar파일 만들기
- 먼저 프로젝트에
lib
폴더를 생성해주었습니다. (library의 약자)
< 생성된 jar파일 >
-c
: 생성옵션으로 jar파일을 만들기위해 꼭있어야할 옵션입니다.-f
: jar파일의 위치와 이름을 지정해줄 수 있는 옵션입니다.
(4) jar파일 압축풀기
- 압축이 풀리는 모습을 보기위해 기존의 class파일을 제거해 주었습니다.
생성됨: META-INF/
증가됨: META-INF/MANIFEST.MF
생성됨: class/first/
생성됨: class/first/second/
증가됨: class/first/second/test.class
증가됨: class/first/second/main.class
< 압축풀기 전 >
< 압축풀기 후 >
(5) jar파일 실행하기
./lib/test.jar에 기본 Manifest 속성이 없습니다.
- Manifest의 속성이 없기 때문에 실행이 안된다고 오류가출력됩니다.
3️⃣ jar파일 실행하기
(1) Manifest파일 만들기
- Manifest파일은 자바 에플리케이션의 정보를 담은 메타데이터 파일입니다.
- 먼저
src
폴더내부에Manifest.txt
파일을 만든 뒤 클래스파일을 다음과같이 적어줍니다./_ Manifest.txt _/
Class-Path: ../class/
Main-Class:first.second.main
Class-Path
: 클래스파일의 위치를 적어줍니다.(jar파일기준으로 상대경로)Main-Class
: main메서드를 가지고있는 클래스명MacOs (리눅스계열)의 경우 마지막에 공백줄을 잊지말아야 합니다.- 다음명령을 입력하여
Manifest
를 추가하여 다시jar파일
을 만들어 줍니다.test%>jar -cfvm ./lib/test.jar ./src/Manifest.txt ./class/first
Manifest를 추가함
추가하는 중: class/first/(입력 = 0) (출력 = 0)(0%를 저장함)
추가하는 중: class/first/second/(입력 = 0) (출력 = 0)(0%를 저장함)
추가하는 중: class/first/second/test.class(입력 = 446) (출력 = 298)(33%를 감소함)
추가하는 중: class/first/second/main.class(입력 = 332) (출력 = 245)(26%를 감소함)
-m
: Manifest를 추가해주는 옵션-v
: 과정을 출력해주는 옵션(입력에보다 출력이 감소한 것으로 보아 실제로 압축효과가입음을 확인)
(2) Manifest파일 만들기(특이케이스)
- 사실 추가해줄 Manifest파일의 명은 아무거나 상관없습니다.
ex) aa.txt
- 하지만 관습상
Manifest.txt 로 만들어 줍니다.
▪️ 위에서 jar파일 을 압축을 풀때 자동으로 생성됬던 MANIFEST.MF 을 Manifest파일로 이용해도 됩니다.
▪️ 자동으로 생성된MANIFEST.MF 파일에는 아래와 같이 jar파일에대한 정보가 적혀있었습니다.
▪️ 자동으로 생성된
< 자동생성된 MANIFEST.MF에 적힌내용 >
Manifest-Version: 1.0
Created-By: 11.0.11 (AdoptOpenJDK)
- 다음과 같이 텍스트를 추가해주어 사용하면 됩니다.
/_ MANIFEST.MF _/
Manifest-Version: 1.0
Created-By: 11.0.11 (AdoptOpenJDK)
Class-Path: ../class/
Main-Class: first.second.main
- 하지만
META-INF/MANIFEST.MF
은 압축을 풀때 생성되는 파일이기 때문에src폴더
에Manifest.txt
파일을 만들어 사용하는 것이 좋을 것 같습니다.
(3) jar파일 실행
hello world!%
- 정상적으로 잘 출력됐습니다.