Java

command line을 ν™œμš©ν•œ JAR 파일 μƒμ„±ν•˜κΈ°

9taetae9 2024. 12. 21. 21:01
728x90

Java κ°œλ°œμ—μ„œ JAR(Java Archive) νŒŒμΌμ€ Java 클래슀 파일과 κ΄€λ ¨ 메타데이터λ₯Ό ν•˜λ‚˜μ˜ 파일둜 λ¬Άμ–΄ 배포할 수 있게 ν•΄μ£ΌλŠ” ν•„μˆ˜μ μΈ μš”μ†Œλ‹€. ν˜„λŒ€μ˜ IDEλ‚˜ Maven, Gradle 같은 λΉŒλ“œ 도ꡬ듀이 JAR 생성을 μžλ™ν™”ν•΄ μ£Όμ§€λ§Œ, JAR 생성 μˆ˜λ™ ν”„λ‘œμ„ΈμŠ€λ₯Ό μ΄ν•΄ν•˜λŠ” 것은 Java의 νŒ¨ν‚€μ§• μ‹œμŠ€ν…œμ„ μ΄ν•΄ν•˜κΈ° μœ„ν•΄ μ€‘μš”ν•˜λ‹€.

 

JDK(Java Development Kit) μ„€μΉ˜ ν•„μš”

JDK - μ»΄νŒŒμΌμ„ μœ„ν•œ javac와 jar 파일 생성을 μœ„ν•œ jar 같은 ν•„μˆ˜ 도ꡬ듀이 ν¬ν•¨λ˜μ–΄ μžˆλ‹€.

 

JAR νŒŒμΌμ€ μžλ°” λŸ°νƒ€μž„μ΄ 효율적으둜 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ 배포(deploy)ν•  수 μžˆλŠ” μˆ˜λ‹¨μœΌλ‘œ μ„€κ³„λ˜μ—ˆλ‹€. μžλ°” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ κ΅¬μ„±ν•˜λŠ” ν΄λž˜μŠ€μ™€ κ΄€λ ¨ λ¦¬μ†ŒμŠ€λ“€μ„ 단일 파일둜 λ¬Άμ–΄ μ••μΆ•λœ ν˜•νƒœμΈ JAR νŒŒμΌμ€ ν•œ μ°¨λ‘€μ˜ μš”μ²­μœΌλ‘œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 전체λ₯Ό λ‹€μš΄λ‘œλ“œν•  수 있게 ν•΄μ€€λ‹€.

 

1. Java μ†ŒμŠ€ μ½”λ“œ μž‘μ„±

public class MyJavaFile {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}

 

2. μ†ŒμŠ€ μ½”λ“œ 컴파일

Java μ†ŒμŠ€ μ½”λ“œλ₯Ό JVM(Java Virtual Machine)이 μ‹€ν–‰ν•  수 μžˆλŠ” λ°”μ΄νŠΈμ½”λ“œλ‘œ μ»΄νŒŒμΌν•΄μ•Ό ν•œλ‹€.

javac MyJavaFile.java

이 λͺ…λ Ήμ–΄λŠ” 컴파일된 λ°”μ΄νŠΈμ½”λ“œκ°€ ν¬ν•¨λœ MyJavaFile.class νŒŒμΌμ„ μƒμ„±ν•œλ‹€.

λ§Œμ•½ μ†ŒμŠ€ μ½”λ“œμ— 문법 였λ₯˜ λ“±μ˜ λ¬Έμ œκ°€ μžˆλ‹€λ©΄ μ»΄νŒŒμΌλŸ¬κ°€ ν•΄λ‹Ή λ‹¨κ³„μ—μ„œ 이λ₯Ό μ•Œλ¦°λ‹€.

 

3. Manifest 파일 생성

Manifest νŒŒμΌμ€ JAR의 메타데이터λ₯Ό ν¬ν•¨ν•˜λŠ” νŠΉλ³„ν•œ 파일둜 μ‹€ν–‰ν•  메인 ν΄λž˜μŠ€μ™€ 버전 정보 같은 μ€‘μš”ν•œ 정보λ₯Ό μ œκ³΅ν•œλ‹€.

  1. META-INF 디렉토리 생성: mkdir META-INF
  2. META-INF 디렉토리 μ•ˆμ— MANIFEST.MF νŒŒμΌμ„ μ•„λž˜μ™€ 같이 생성:
Manifest-Version: 1.0
Main-Class: MyJavaFile
Built-By: μž‘μ„±μžμ΄λ¦„

 

Manifest 파일 μž‘μ„± μ‹œ μ£Όμ˜μ‚¬ν•­:

  • 파일 끝은 λ°˜λ“œμ‹œ μƒˆ 쀄(newline)
  • Main-Class 속성은 main λ©”μ„œλ“œκ°€ μžˆλŠ” 클래슀λ₯Ό μ§€μ •
  • Manifest ν˜•μ‹μ€ 콜둠(:)으둜 κ΅¬λΆ„λœ ν‚€ : κ°’ 쌍

4. JAR 파일 μƒμ„±ν•˜κΈ°

jar λͺ…λ Ήμ–΄λ₯Ό μ‚¬μš©ν•˜μ—¬ λͺ¨λ‘ νŒ¨ν‚€μ§•

jar cmvf META-INF/MANIFEST.MF myJarFile.jar MyJavaFile.class

 

λͺ…λ Ήμ–΄ μ˜΅μ…˜ μ„€λͺ…:

  • c: μƒˆ μ•„μΉ΄μ΄λΈŒ 생성
  • m: κΈ°μ‘΄ 파일의 manifest 정보 포함
  • v: 상세 좜λ ₯ 생성(μ••μΆ•λ₯ , μƒμ„±μΌμ‹œ λ“±)
  • f: μ•„μΉ΄μ΄λΈŒ 파일λͺ… μ§€μ •

좜λ ₯ κ²°κ³Ό 예

added manifest
adding: MyJavaFile.class(in = 426) (out= 289)(deflated 32%)

5. JAR 파일 ν…ŒμŠ€νŠΈν•˜κΈ°

JAR 파일 μ‹€ν–‰

java -jar myJarFile.jar

 

μ‹€ν–‰ κ²°κ³Ό

Hello World!

 

자주 λ°œμƒν•˜λŠ” λ¬Έμ œμ™€ ν•΄κ²° 방법

  1. Manifest 파일 포맷 κ΄€λ ¨
    • Manifest 파일 끝에 μƒˆ 쀄이 μžˆλŠ”μ§€ 확인
    • ν‚€-κ°’ 쌍의 콜둠 뒀에 곡백이 μ—†λŠ”μ§€ 확인
    • Main-Classλ₯Ό μ˜¬λ°”λ₯Έ 클래슀 μ΄λ¦„μœΌλ‘œ μ§€μ •ν–ˆλŠ”μ§€ 확인
  2. 클래슀λ₯Ό 찾을 수 μ—†λŠ” 였λ₯˜
    • ν•„μš”ν•œ λͺ¨λ“  클래슀 파일이 JAR에 ν¬ν•¨λ˜μ–΄ μžˆλŠ”μ§€ 확인
    • νŒ¨ν‚€μ§€ ꡬ쑰가 manifest의 Main-Class μ„ μ–Έκ³Ό μΌμΉ˜ν•˜λŠ”μ§€ 확인
    • μ™ΈλΆ€ μ˜μ‘΄μ„±μ„ μ‚¬μš©ν•˜λŠ” 경우 ν΄λž˜μŠ€νŒ¨μŠ€κ°€ μ˜¬λ°”λ₯΄κ²Œ μ„€μ •λ˜μ–΄ μžˆλŠ”μ§€ 확인
  3. κΆŒν•œ κ΄€λ ¨ 문제
    • λŒ€μƒ 디렉토리에 μ“°κΈ° κΆŒν•œμ΄ μžˆλŠ”μ§€ 확인
    • μƒμ„±λœ JAR νŒŒμΌμ— μ‹€ν–‰ κΆŒν•œμ΄ μžˆλŠ”μ§€ 확인

κ³ κΈ‰ JAR κΈ°λŠ₯

1) μ—¬λŸ¬ 파일 μΆ”κ°€ν•˜κΈ°

μ—¬λŸ¬ 클래슀 νŒŒμΌμ΄λ‚˜ λ¦¬μ†ŒμŠ€λ₯Ό ν¬ν•¨μ‹œν‚€κΈ°

jar cmvf META-INF/MANIFEST.MF myJarFile.jar *.class resources/

c(Create) : μƒˆλ‘œμš΄ jar νŒŒμΌμƒμ„±

m : μ§€μ •λœ manifest νŒŒμΌλ‘œλΆ€ν„° manifest 정보λ₯Ό jar 파일 λ‚΄ ν¬ν•¨μ‹œμΌœ 쀌

v : μ••μΆ•λ₯  및 μƒμ„±μΌμ‹œ λ“±μ˜ 정보 제곡

f : jar 파일의 이름을 μ§€μ •ν•  경우 μ‚¬μš©

 

2) JAR λ‚΄μš© 보기

JAR 파일 λ‚΄μš© λ‚˜μ—΄ν•˜κΈ°

jar tf myJarFile.jar

t(table) : jar 파일의 λͺ©λ‘μ„ λ‚˜μ—΄

f : jar 파일의 이름을 μ§€μ •ν•  경우 μ‚¬μš©

 

3) JAR λ‚΄μš© μΆ”μΆœν•˜κΈ°

jar xf myJarFile.jar

x(eXtract) : jarνŒŒμΌμ—μ„œ 파일 μΆ”μΆœ

f : jar 파일의 이름을 μ§€μ •ν•  경우 μ‚¬μš©

 

 

κ²°λ‘ 

ν˜„λŒ€μ˜ λΉŒλ“œ 도ꡬ듀이 JAR 생성을 μžλ™ν™”ν•΄ μ£Όμ§€λ§Œ, JAR 파일 μƒμ„±κ³Όμ •μ˜ μ΄ν•΄λŠ” μ•„λž˜μ™€ 같은 상황에 ν•„μš”ν•˜λ‹€.

  • νŒ¨ν‚€μ§• 문제 디버깅
  • μ»€μŠ€ν…€ λΉŒλ“œ ν”„λ‘œμ„ΈμŠ€ 생성
  • λΉŒλ“œ λ„κ΅¬μ˜ λ™μž‘ 원리 이해
  • λΉŒλ“œ 도ꡬλ₯Ό μ‚¬μš©ν•  수 μ—†λŠ” ν™˜κ²½μ—μ„œμ˜ μž‘μ—…

 

 

참고 자료 :

https://engineering.tomtom.com/create-java-jar/

 

Back to Basics: How to create a java JAR using command line

In the world of Java development, JAR(Java Archive) files play a very important role in packaging and distributing our applications. Whether you are a beginner or an experienced developer, it’s essential to understand the process of creating a JAR file.

engineering.tomtom.com

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

 

JAR (파일 포맷) - μœ„ν‚€λ°±κ³Ό, 우리 λͺ¨λ‘μ˜ 백과사전

μœ„ν‚€λ°±κ³Ό, 우리 λͺ¨λ‘μ˜ 백과사전. JAR(Java Archive, μžλ°” μ•„μΉ΄μ΄λΈŒ)λŠ” μ—¬λŸ¬κ°œμ˜ μžλ°” 클래슀 파일과, ν΄λž˜μŠ€λ“€μ΄ μ΄μš©ν•˜λŠ” κ΄€λ ¨ λ¦¬μ†ŒμŠ€(ν…μŠ€νŠΈ, κ·Έλ¦Ό λ“±) 및 메타데이터λ₯Ό ν•˜λ‚˜μ˜ 파일둜 λͺ¨μ•„μ„œ μžλ°”

ko.wikipedia.org

 

728x90