Lang/Java 질문 및 복습
.jar 파일
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 |