๊ด€๋ฆฌ ๋ฉ”๋‰ด

Unfazedโ—๏ธ๐ŸŽฏ

command line์„ ํ™œ์šฉํ•œ JAR ํŒŒ์ผ ์ƒ์„ฑํ•˜๊ธฐ ๋ณธ๋ฌธ

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