Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

การใช้ Multi-version Compatible JAR ใน Java 9

Multi-version compatible JAR function อนุญาตให้สร้าง version ของคลาสที่เลือกใช้เฉพาะตอนรัน library programs ใน Java environment version เฉพาะ สามารถระบุ compiled version ผ่าน parameter --release

การเปลี่ยนแปลงเฉพาะ: ไฟล์ MANIFEST.MF ใน directory META-INF มี attribute ใหม่:


Multi-Release: true

มี version directory ใหม่ภายใต้ META-INF หากต้องการรองรับ Java 9 จะมี directory 9 ภายใต้ versions directory


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

ตัวอย่างสมบูรณ์: สร้าง Multi-release JAR

Step 1: สร้าง Java 7 Version


# โฟลเดอร์: 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");
    }
}

Step 2: สร้าง Java 9 Version


# โฟลเดอร์: 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");
    }
}

Step 3: Compile ทั้งสอง Version


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

Step 4: สร้าง Multi-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

Step 5: ทดสอบรัน


# ใช้ 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

โครงสร้าง Multi-release JAR


myapp.jar
├── META-INF/
│   ├── MANIFEST.MF          # Multi-Release: true
│   └── versions/
│       ├── 9/               # Java 9+ specific classes
│       │   └── com/myapp/OptimizedClass.class
│       ├── 10/              # Java 10+ specific classes
│       │   └── com/myapp/OptimizedClass.class
│       └── 11/              # Java 11+ specific classes
│           └── com/myapp/OptimizedClass.class
├── com/myapp/
│   ├── Main.class           # Base version (Java 8-)
│   └── OptimizedClass.class # Base version
└── module-info.class        # Optional

Jar Command Options

Option คำอธิบาย
-c, --create สร้าง JAR ใหม่
-f, --file ระบุชื่อไฟล์ JAR
-C dir เปลี่ยน directory ก่อน add files
--release N เพิ่ม files สำหรับ Java version N (ใส่ใน META-INF/versions/N/)
--main-class ระบุ Main-Class ใน MANIFEST

ข้อควรระวัง

  • Base version (root) ต้อง compile ด้วย oldest supported version
  • Version-specific classes ต้องมี package structure เดียวกัน
  • ไม่สามารถ override module-info.class ใน versions ได้
  • Resource files (non-class) ก็รองรับ multi-release ได้
  • jdeps --multi-release <version> สำหรับ analyze

Use Cases

  • ใช้ API ใหม่ (var, switch expressions, records) ใน version ใหม่
  • Optimize performance ด้วย JDK internal APIs ใน version ใหม่
  • Backward compatibility สำหรับ library users
  • Migration path จาก Java 8 ไป 9, 11, 17, 21