Срок службы 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”