웹 개발 개념

JAR 파일이 어떤 Java 버전에서 실행 가능한지 확인하는 가장 정확한 방법

hwangsoojin 2025. 11. 22. 12:24

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 버전을 판별할 수 있음