#Java 9 – Multi-Release jar


#Java 9 – Multi-Release jar

Java 9 wprowadza nowy mechanizm który pozwala tworzyć archiwa *.jar z różnymi wersjami plików które dotyczą danej wersji Javy. Tworzenie całkowicie nowych wersji archiwów dla różnych wersji Javy może powodować rozmaite błędy oraz radykalnie spowolnić tym proces wytwarzania oprogramowania. Do dzieła! Tworzymy nowy projekt Mavena z następującą oto strukturą:

Klasa PrinterJava:

public class PrinterJava {
    
    public static void printMsg(){
        System.out.println("PrinterJava8");
    }

    public static void main(String[] args) {
        printMsg();
    }
}

używając dockera tworzymy kontener w którym zainstalowana wersja Javy to wersja 9, zapraszam do artykułu https://javaleader.pl/2019/10/23/instalacja-dockera-dla-systemu-linux. gdzie krok po kroku opisane jest jak taki kontener utworzyć. Kompilujemy projekt:

wersja Javy 8:

root@73fbd3fe8579:/multi-release-jar# javac --release 8 -d classes ./src/main/java/pl/javaleader/*.java

wersja Javy 9:

root@73fbd3fe8579:/multi-release-jar# javac --release 9 -d classes-9 ./src/main/java9/pl/javaleader/*.java

tworzenie pliku jar:

jar --create --file target/mrjar.jar --main-class pl.javaleader.PrinterJava -C classes . --release 9 -C classes-9 .

Testujemy wykonywanie utworzonego pliku jar dla środowiska z różnymi wersjami javy:

środowisko z Java 9:

root@3ba9ea7e11a2:/multi-release-jar# java -version
openjdk version "9.0.4"
OpenJDK Runtime Environment (build 9.0.4+12-Debian-4)
OpenJDK 64-Bit Server VM (build 9.0.4+12-Debian-4, mixed mode)
root@3ba9ea7e11a2:/multi-release-jar# java -jar mrjar.jar
PrinterJava9
root@3ba9ea7e11a2:/multi-release-jar#

środowisko z Java 8:

root@edusession:/multi-release-jar# java -version
java version "1.8.0_201"
Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)
root@edusession:/multi-release-jar# java -jar mrjar.jar
PrinterJava8
root@edusession:/multi-release-jar#


Leave a comment

Your email address will not be published.


*