JAR 파일이 어떤 Java 버전에서 실행 가능한지 확인하는 가장 정확한 방법
Java 프로젝트를 빌드하고 나면 가장 중요한 의문점 두 가지가 생깁니다.
1. 이 JAR 파일은 어떤 Java 버전에서 실행 가능한가?
2. 내 컴퓨터에는 어떤 Java 버전이 설치되어 있을까?
특히 Java는 버전 호환성(Backward Compatibility) 문제 때문에
실행 환경이 다르면 JAR이 작동하지 않는 경우도 있습니다.
이 글에서는 JAR 내부 바이트코드의 major version을 확인하여
정확한 Java 실행 가능 버전을 알아내는 방법을
Windows CMD · Linux Bash 기준으로 모두 정리했습니다.
내 컴퓨터에 설치된 Java 버전 확인 먼저 하기
가장 기본적인 확인 방법입니다.
✔ Windows CMD
java -version
✔ Linux Bash
java -version
출력 예시:
openjdk version "21.0.1" 2023-10-17
이 값은 현재 내가 실행할 수 있는 Java 버전을 의미합니다.
JAR이 어떤 Java 버전에서 실행 가능한지 확인하는 핵심 명령어
Java 소스(.java)는 컴파일되면 .class 파일이 되고,
이 .class 안에는 JVM 바이트코드 버전(major version) 이 기록됩니다.
이 major version이 바로 JAR이 실행 가능한 Java 버전을 알려줍니다.
✔ Windows CMD
javap -verbose build\classes\java\main\org\example\Main.class | findstr "major"
✔ Linux Bash
javap -verbose build/classes/java/main/org/example/Main.class | grep "major version"
출력 예시:
major version: 65
이 숫자가 JAR의 타겟 Java 버전입니다.
major version ↔ Java 버전 대응표
| major version | Java 버전 |
| 52 | Java 8 |
| 55 | Java 11 |
| 56 | Java 12 |
| 57 | Java 13 |
| 61 | Java 17 |
| 65 | Java 21 |
예: major version: 65 → Java 21 환경에서 실행되는 JAR
여기서 주의할 만한 포인트: org/example 은 고정된 경로가 아니다
위 명령어에서 등장한:
org\example\Main.class
이 부분은 절대 고정된 경로가 아니며,
프로젝트의 패키지(package) 구조가 그대로 폴더 구조로 표현된 것입니다.
✔ 패키지가 아래처럼 되어 있다면:
package org.example;
컴파일된 .class 파일 구조:
build/classes/java/main/org/example/Main.class
✔ 패키지가 바뀌면 경로도 바뀜
예)
package com.project-team01.converter;
컴파일된 위치:
build/classes/java/main/com/project-team01/converter/Main.class
즉,
org/example 은 특정 프로젝트에서만 해당되는 패키지 경로일 뿐,
다른 프로젝트에서는 완전히 다른 경로가 나온다.
JAR 파일의 압축을 직접 풀고 확인하는 방법
조금 번거롭지만 JAR 내부를 직접 확인해도 됩니다.
Windows CMD
jar xf app.jar
javap -verbose path\to\SomeClass.class | findstr "major"
Linux Bash
jar xf app.jar
javap -verbose path/to/SomeClass.class | grep "major version"
요약
- java -version → 내 컴퓨터의 Java 버전 확인
- javap -verbose ... → JAR의 실제 실행 가능 Java 버전 확인
- org/example 같은 경로는 패키지 구조일 뿐, 절대 고정 아님
- major version 숫자를 보고 정확한 Java 버전을 판별할 수 있음