1. Въведение
Една от новите функции, които Java 9 ни носи, е възможността за изграждане на Multi-Release JAR (MRJAR). Както се казва в предложението за подобрение на JDK, това ни позволява да имаме различни специфични версии на Java на клас в един и същ JAR.
В този урок ние изследваме как да конфигурираме MRJAR файл с помощта на Maven.
2. Мейвън
Maven е един от най-използваните инструменти за изграждане в екосистемата на Java; една от неговите възможности е опаковането на проект в JAR.
В следващите раздели ще разгледаме как да го използваме за изграждане на MRJAR вместо това.
3. Примерен проект
Нека започнем с основен пример.
Първо ще определим клас, който отпечатва използваната в момента версия на Java; преди Java 9, един от подходите, които бихме могли да използваме, беше методът System.getProperty :
public class DefaultVersion { public String version() { return System.getProperty("java.version"); } }
Сега, от Java 9 и нагоре, можем да използваме метода на новата версия от класа Runtime :
public class DefaultVersion { public String version() { return Runtime.version().toString(); } }
С този метод можем да получим екземпляр на клас Runtime.Version , който ни дава информация за JVM, използван в новия формат на низови версии.
Освен това, нека добавим клас на приложение, за да регистрираме версията:
public class App { private static final Logger logger = LoggerFactory.getLogger(App.class); public static void main(String[] args) { logger.info(String.format("Running on %s", new DefaultVersion().version())); } }
И накрая, нека поставим всяка версия на DefaultVersion в собствената си структура на src / main directory:
├── pom.xml ├── src │ ├── main │ │ ├── java │ │ │ └── com │ │ │ └── baeldung │ │ │ └── multireleaseapp │ │ │ ├── DefaultVersion.java │ │ │ └── App.java │ │ └── java9 │ │ └── com │ │ └── baeldung │ │ └── multireleaseapp │ │ └── DefaultVersion.java
4. Конфигурация
За да конфигурираме MRJAR от класовете по-горе, трябва да използваме два плъгина на Maven: приставката Compiler и приставката JAR.
4.1. Приставка за компилатор Maven
В приставката на Maven Compiler трябва да конфигурираме по едно изпълнение за всяка версия на Java, която ще пакетираме.
В този случай добавяме две:
org.apache.maven.plugins maven-compiler-plugin compile-java-8 compile 1.8 1.8 compile-java-9 compile compile 9 ${project.basedir}/src/main/java9 ${project.build.outputDirectory}/META-INF/versions/9
Ще използваме първото изпълнение compile-java-8, за да компилираме нашия клас Java 8 и изпълнението compile-java-9, за да компилираме нашия клас Java 9.
Виждаме, че е необходимо да конфигурирате таговете compileSourceRoot и outputDirectory със съответните папки за версията на Java 9.
Въпреки това, от maven-compiler-plugin 3.7.1, не е необходимо да задаваме изходната директория ръчно. Вместо това всичко, което трябва да направим, е да активираме свойството multiReleaseOutput :
9 ${project.basedir}/src/main/java9 true
Когато е зададено на true , приставката на компилатора премества всички специфични за изданието класове в директорията META-INF / versions / $ {release} . Моля, имайте предвид, че тук трябва да зададем маркера за освобождаване на желаната версия на Java, в противен случай приставката на компилатора не успее .
4.2. Maven JAR приставка
Използваме приставката JAR, за да зададем записа Multi-Release на true в нашия MANIFEST файл. С тази конфигурация времето за изпълнение на Java ще погледне в папката META-INF / версии на нашия JAR файл за специфични за версията класове; в противен случай се използват само базовите класове.
Нека добавим конфигурацията на плъгин maven-jar :
org.apache.maven.plugins maven-jar-plugin 3.2.0 true
5. Тестване
Време е да тестваме генерирания ни JAR файл.
Когато изпълним с Java 8, ще видим следния изход:
[main] INFO com.baeldung.multireleaseapp.App - Running on 1.8.0_252
Но ако изпълним с Java 14, ще видим:
[main] INFO com.baeldung.multireleaseapp.App - Running on 14.0.1+7
Както виждаме, сега той използва новия изходен формат. Имайте предвид, че въпреки че нашият MRJAR е създаден с Java 9, той е съвместим с множество основни версии на платформата на Java.
6. Заключение
В този кратък урок видяхме как да конфигурираме инструмента за изграждане на Maven, за да генерира прост MRJAR.
Както винаги, пълният код, представен в този урок, е достъпен в GitHub.