Срок службы Java версии 8 истек. С января 2019 года бесплатная коммерческая версия больше не получает обновлений (см. oracle.com ).
Итак (если вы не хотите переключиться на сторонних поставщиков JDK, таких как AdoptOpenJDK или Amazon правильно//) пришло время обновить все Java-проекты до последней версии. Или, по крайней мере, до последней версии долгосрочной поддержки.
Это сообщение в блоге представляет собой отчет об опыте о шагах, которые необходимо сделать на этом пути.
Окружающая среда
Проект, который будет обновляться, довольно мал. Это приложение Spring Boot , которое использует Apache Wicket в качестве веб-фреймворка и Gradle для управления сборкой. Основной средой разработки являются MacBook Pro и IntelliJ IDEA.
Обзор установленных виртуальных машин
В macOS с помощью этой команды в терминале могут быть перечислены все JVM, установленные в системе:
$ /usr/libexec/java_home -V
Matching Java Virtual Machines (3):
10.0.1, x86_64: "Java SE 10.0.1" /Library/Java/JavaVirtualMachines/jdk-10.0.1.jdk/Contents/Home
9.0.1, x86_64: "Java SE 9.0.1" /Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home
1.8.0_152, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_152.jdk/Contents/Home
/Library/Java/JavaVirtualMachines/jdk-10.0.1.jdk/Contents/Home
В этом случае они были установлены через Homebrew , поэтому обзор также может быть предоставлен следующей командой:
brew cask list
JDK , который используется Gradle , определяется переменной окружения JAVA_HOME . С такими подобными инструкциями в .bash_profile , версии можно легко переключать:
export JAVA_8_HOME=$(/usr/libexec/java_home -v1.8) export JAVA_9_HOME=$(/usr/libexec/java_home -v9) export JAVA_10_HOME=$(/usr/libexec/java_home -v10) alias java8='export JAVA_HOME=$JAVA_8_HOME' alias java9='export JAVA_HOME=$JAVA_9_HOME' alias java10='export JAVA_HOME=$JAVA_10_HOME' # use JDK 8 by default export JAVA_HOME=$JAVA_8_HOME
Через Homebrew OpenJDK 11 можно установить следующим образом:
brew update brew tap homebrew/cask-versions brew search java brew cask install java11
(См. stackoverflow.com ) для получения более подробной информации.
Теперь Java 11 можно добавить в .bash_profile :
export JAVA_11_HOME=$(/usr/libexec/java_home -v11) alias java11='export JAVA_HOME=$JAVA_11_HOME'
После запуска новой вкладки терминала теперь она должна быть готова к использованию:
$ java11 $ java -version openjdk version "11.0.2" 2019-01-15 OpenJDK Runtime Environment 18.9 (build 11.0.2+9) OpenJDK 64-Bit Server VM 18.9 (build 11.0.2+9, mixed mode)
Зависимости обновления
Мой самый настоятельный совет для вас сегодня таков: если вы используете Java 9 или более позднюю версию, обновите все свои инструменты и зависимости до последних версий. — Марк Рейнгольд
С Java 8 на Java 9 в язык были внесены некоторые существенные изменения. Таким образом, проекты могут столкнуться с проблемами, если библиотеки, которые они включили, зависят от измененных языковых функций. Так что это хорошая идея, чтобы начать фактическую миграцию, обновив все зависимости до их последней версии. С Gradle этот процесс поддерживается плагином Gradle Versions :
$ gradle dependencyUpdates -Drevision=release
-----------------------------------------------------------------
: Project Dependency Updates (report to plain text file)
-----------------------------------------------------------------
The following dependencies are using the latest release version:
- com.giffing.wicket.spring.boot.starter:wicket-spring-boot-starter:2.1.5
- javax.xml.bind:jaxb-api:2.3.1
...
The following dependencies have later release versions:
- com.google.guava:guava [27.0.1-jre -> 27.1-jre]
https://github.com/google/guava
- io.spring.dependency-management:io.spring.dependency-management.gradle.plugin [1.0.6.RELEASE -> 1.0.7.RELEASE]
- org.projectlombok:lombok [1.18.4 -> 1.18.6]
https://projectlombok.org
- org.springframework.boot:spring-boot-gradle-plugin [2.1.2.RELEASE -> 2.1.3.RELEASE]
https://projects.spring.io/spring-boot/#/spring-boot-parent/spring-boot-tools/spring-boot-gradle-plugin
...
- org.wicketstuff:wicketstuff-annotation [8.2.0 -> 8.3.0]
http://wicketstuff.org
Кроме того, Gradle должен быть обновлен до последней версии:
brew upgrade gradle
Кроме того, ИДЕЯ и все ее плагины должны быть актуальными.
Обновите уровень языка в файле Gradle
Теперь мы готовы увеличить номер версии Java в файле build.gradle :
subprojects {
sourceCompatibility = 11
targetCompatibility = 11
Используйте JDK 11 в среде IDE
После этого нам нужно переключиться на JDK 11 в IntelliJ. Это можно сделать, перейдя в пункт меню “Файл > Структура проекта”. Новую версию и уровень языка можно выбрать в раскрывающемся меню Project SDK. Если он еще недоступен, его можно добавить в разделе “Настройки платформы”.
Также проверьте в “Настройках”, используется ли новая цель компиляции:
Теперь создайте проект и запустите модульные тесты. Если вам повезет, ошибок не будет.
Используйте JDK 11 на терминале
Затем попробуйте сделать это в терминале:
gradle clean check
В случае этого проекта была только одна проблема: сборка через терминал завершилась неудачей, поскольку не удалось загрузить библиотеку Lombok. Исправить это было довольно просто, просто добавив эти два объявления зависимостей в файл build.gradle :
annotationProcessor("org.projectlombok:lombok:${lombokVersion}")
testAnnotationProcessor("org.projectlombok:lombok:${lombokVersion}")
После всех обновлений убедитесь, что приложение по-прежнему работает правильно:
gradle clean bootRun -Dspring.profiles.active=qa
Больше никаких проблем не возникло. Так что в целом обновление до Java 11 оказалось проще, чем ожидалось:
Так что в целом обновление до Java 11 оказалось проще, чем ожидалось:
И последнее, но не менее важное: устаревшие версии Java могут быть удалены из среды разработки:
Удаление с помощью Homebrew
brew uninstall java9 brew uninstall java10
Жесткое удаление
Если они не были установлены через Homebrew, это способ удалить старые версии Java:
$ cd /Library/Java/JavaVirtualMachines $ sudo rm -rf jdk-9.0.1.jdk jdk-10.0.1.jdk
Оригинал: “https://dev.to/janux_de/report-about-updating-a-java-project-from-jdk-8-to-jdk-11-2klf”