Рубрики
Без рубрики

Отчет об обновлении Java-проекта с JDK8 на JDK 11

Описание опыта обновления небольшого Java-проекта с версии JDK 8 до 11 с помощью Gradle и Intellij на macOS. Помеченный как java, gradle.

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