Итак, прошел уже месяц с выхода Java 10. Уже даже успел подойти первый апдейт. А это значит — пора переходить и нам :) Вслед за переходом на Java 9.
Установка
Джаву, как всегда, можно скачать и установить вручную. Но это не мой путь. Я обычно предпочитаю устанавливать из готовых пакетов (которые, к сожалению, выходят месяц-два спустя). Например, так:
sudo add-apt-repository ppa:linuxuprising/java sudo apt-get update sudo apt-get install oracle-java10-installer
Проблема с IntelliJ IDEA
Первая проблема, с которой я столкнулся, была в IDE. Я сидел на IntelliJ IDEA 2017.3. И при добавлении JDK 10 в проект идея отказывалась признавать корневую директорию JDK как «The selected directory is not a valid home for JDK». Проблема легко решается переходом на 2018.1.2. Но должен предупредить — в новой версии идеи довольно много неприятных мелких багов. Надеюсь, ситуация в Эклипсе получше.
Проблема с maven-compiler-plugin
Первым делом после подключения JDK 10 я попробовал собрать проект мавеном. Не получилось:
Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.7.0:compile (default-compile) on project push: Execution default-compile of goal org.apache.maven.plugins:maven-compiler-plugin:3.7.0:compile failed.: IllegalArgumentException -> [Help 1]</em>
Гуглинг помог быстро найти проблему, а именно в maven-compiler-plugin. Как оказалось, этот плагин использует внутри старую версию библиотеки asm, которая не поддерживает Java 10. К счастью, ее легко можно пофиксить, изменив зависимость в плагине:
<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.7.0</version><configuration><source>10</source><target>10</target></configuration><dependencies><dependency><groupId>org.ow2.asm</groupId><artifactId>asm</artifactId><version>6.1.1</version></dependency></dependencies></plugin>
Проблема с maven-surefire-plugin
Проект собрался. Настало время билда с тестами. И опять получился нежданчик. Теперь уже в maven-surefire-plugin:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.20.1:test (default-test) on project Blynk: Execution default-test of goal org.apache.maven.plugins:maven-surefire-plugin:2.20.1:test failed.: NullPointerException
Я особо не искал причину, а по опыту переезда на девятку — просто проапдейтил плагин к последней версии 2.21.0, что и решило проблему.
Опять IDE
Сборка с тестами прошла успешно, и ничего не отвалилось, что уже довольно неплохо (в отличие от девятки). Теперь я попробовал запустить тесты из идеи. И получил довольно странную ошибку:
Release version 11 not supported
Выяснилось вот что. Во-первых, «Language Level» в модулях проекта оказался на Level 11. Во-вторых, настройка «Module JDK» в каждом из модулей была на
Travis CI
Так как наш проект open-source, мы используем бесплатный и публичный Travis Cloud для прогонки тестов.
Travis.yml:
language: java before_install: - wget https://github.com/sormuras/bach/raw/master/install-jdk.sh matrix: include: - env: JDK='OpenJDK 10' install: . ./install-jdk.sh -F 10 -L GPL</em>
Lombok
Если вы используете или собираетесь использовать библиотеку Lombok в вашем проекте, то с десяткой придется подождать. Так как Lombok fails with JDK 10. Хотя, с другой стороны — это отличный повод выпилить его из вашего проекта.
P. S.
Image may be NSFW.
Clik here to view.
Я уже перевел часть кода на var. Пока хорошо. Вот, например, кусок кода, который мне нравится больше всего:
Image may be NSFW.
Clik here to view.
А вы уже попробовали Java 10?
Для тех, кто же все-таки решил перейти на
Image may be NSFW.
Clik here to view.
Clik here to view.