Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java 9 다중 버전 호환 JAR(Multi-Release JAR)의 용도와 사용법

다중 버전 호환 JAR(Multi-Release JAR)란?

Java 9에서 도입된 다중 버전 호환 JAR(Multi-Release JAR) 기능을 사용하면 하나의 JAR 파일 안에 여러 Java 버전에 맞는 클래스 파일을 함께 포함시킬 수 있습니다. 이를 통해 라이브러리가 특정 Java 환경에서 실행될 때, 해당 버전에 최적화된 클래스 버전이 자동으로 선택되어 사용되도록 만들 수 있습니다.

컴파일 시 대상 Java 버전은 --release 옵션을 통해 지정할 수 있으며, 이 덕분에 구버전과 신버전의 Java 환경을 모두 지원하는 라이브러리를 손쉽게 배포할 수 있습니다.

MANIFEST.MF 파일 변경 사항

다중 버전 호환 JAR를 사용하려면 META-INF 디렉터리 내의 MANIFEST.MF 파일에 아래와 같은 새로운 속성을 추가해야 합니다.

Multi-Release: true

또한 META-INF 디렉터리 아래에는 새로운 versions 디렉터리가 생성됩니다. 예를 들어 Java 9를 지원하고 싶다면 versions 디렉터리 아래에 9라는 이름의 하위 디렉터리를 만들고, 그곳에 Java 9 전용 클래스 파일을 배치하면 됩니다.

JAR 내부 구조 예시

multirelease.jar
├── META-INF
│ └── versions
│ └── 9
│ └── multirelease
│ └── Helper.class
├── multirelease
├── Helper.class
└── Main.class

위 구조에서 기본 클래스(루트 경로)는 Java 8 이하 환경에서 사용되고, META-INF/versions/9 아래의 클래스는 Java 9 이상 환경에서 실행될 때 우선적으로 로드됩니다.

실습 예제: 두 가지 버전의 JAR 만들기

아래 예제에서는 Test.java 파일로부터 JDK 7용 버전과 JDK 9용 버전, 두 가지 클래스를 담은 다중 버전 호환 JAR를 생성하고, 서로 다른 환경에서 실행해 보겠습니다.

1단계: Java 7용 소스 작성

C:/test/java7/com/tutorialspoint 폴더를 생성한 후, 해당 폴더에 아래와 같이 Test.java 파일을 작성합니다.

package com.tutorialspoint;

public class Test {
public static void main(String args[]) {
System.out.println("Inside Java 7");
}
}

2단계: Java 9용 소스 작성

C:/test/java9/com/tutorialspoint 폴더를 생성한 후, 같은 패키지명으로 Test.java 파일을 작성합니다.

package com.tutorialspoint;

public class Test {
public static void main(String args[]) {
System.out.println("Inside Java 9");
}
}

3단계: 소스 코드 컴파일

--release 옵션을 사용하여 각각 대상 버전에 맞게 컴파일합니다.

C:\test> javac --release 9 java9/com/tutorialspoint/Test.java
C:\test> javac --release 7 java7/com/tutorialspoint/Test.java

4단계: 다중 버전 호환 JAR 생성

jar 명령어에 --release 옵션을 조합하여 하나의 JAR 파일에 두 버전의 클래스를 모두 담습니다.

C:\JAVA> jar -c -f test.jar -C java7 . --release 9 -C java9
Warning: entry META-INF/versions/9/com/tutorialspoint/Test.java, multiple resources with same name

출력되는 경고 메시지는 동일한 이름의 리소스가 여러 버전 디렉터리에 존재한다는 알림일 뿐이며, 다중 릴리스 JAR에서는 정상적인 동작입니다.

실행 결과 확인

JDK 7 환경에서 실행

C:\JAVA> java -cp test.jar com.tutorialspoint.Test
Inside Java 7

JDK 9 환경에서 실행

C:\JAVA> java -cp test.jar com.tutorialspoint.Test
Inside Java 9

실행 결과에서 확인할 수 있듯이, 동일한 JAR 파일임에도 불구하고 실행 환경의 Java 버전에 따라 자동으로 적절한 클래스가 선택됩니다. 이것이 바로 다중 버전 호환 JAR의 핵심 장점으로, 라이브러리 개발자는 여러 개의 JAR를 배포하지 않고도 단일 아티팩트로 다양한 Java 버전을 지원할 수 있습니다.