soooy0 2025. 3. 21. 14:00

오늘은 '이것이 자바다'의 Ch.라이브러리와 모듈 파트를 읽었다.

모둘 배포용 JAR파일 파트에서 의문이었던 점

Q. .jar파일은 배포도 가능하고, 라이브러리로도 가능한 파일인 것인가?

 

A. 그렇다.

.jar(Java ARchive) 파일은 라이브러리로도 사용할 수 있고 배포용으로도 사용할 수 있는 일종의 압축 파일이다.

1. 라이브러리로 사용하는 경우

  • 여러 개의 .class 파일과 필요한 리소스(설정 파일, 이미지 등)를 .jar 파일로 묶어서 배포하면, 다른 프로젝트에서 이 파일을 라이브러리로 활용할 수 있다.
  • 예를 들어, mysql-connector-java.jar 같은 데이터베이스 드라이버를 프로젝트에 추가하면, 우리가 직접 .class 파일을 하나하나 복사하지 않아도 됨.
  • 이때는 JAR 안에 메인 실행 클래스가 따로 필요하지 않아.

2. 배포용으로 사용하는 경우

  • 단독으로 실행할 수 있는 프로그램을 .jar 파일로 만들어 배포할 수도 있음.
  • 이 경우에는 반드시 META-INF/MANIFEST.MF 파일에 실행할 메인 클래스(entry point)를 지정해야 함.
Main-Class: com.example.Main
  • 이렇게 하면 java -jar myapp.jar 명령어로 실행할 수 있음.
  • 스프링 부트 애플리케이션 같은 것도 결국 .jar 파일로 만들어서 실행하는 것.

즉, .jar 파일은 단순히 Java 클래스와 리소스를 압축해서 관리하는 형식인데,

  • 메인 클래스를 지정하면 실행 파일(배포용)
  • 그렇지 않으면 라이브러리

 

1️⃣ 라이브러리 JAR vs 실행 JAR의 차이점

비교 항목라이브러리 JAR실행 JAR
목적 다른 프로젝트에서 필요한 기능 제공 독립적인 프로그램 실행
Main-Class 필요 여부 ❌ 필요 없음 ✅ MANIFEST.MF에 명시해야 함
사용 방식 import 해서 필요한 클래스만 사용 java -jar로 직접 실행
클래스 로딩 방식 개발자가 import 한 클래스만 사용 main()에서 호출하는 클래스만 로드
예시 mysql-connector-java.jar, spring-core.jar myapp.jar, spring-boot-app.jar