Login

Переходим на Java 10: проблемы и решения

Итак, прошел уже месяц с выхода 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» в каждом из модулей была на 9-ке. Похоже на какую-то багу новой Идеи. В общем, после проставления корректных версий вручную — тесты запустились и успешно прошли.

Travis CI

Так как наш проект open-source, мы используем бесплатный и публичный Travis Cloud для прогонки тестов. 10-ка все еще не имеет нативной поддержки от Тревиса, поэтому пришлось искать обходные пути.

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. 10-ка уже 2 дня крутится на наших продакшн-серверах. Пока никаких проблем выявлено не было. В отличие от 9-ки, никакого изменения по перформансу или потреблении памяти замечено не было.

Я уже перевел часть кода на var. Пока хорошо. Вот, например, кусок кода, который мне нравится больше всего:


А вы уже попробовали Java 10?

Для тех, кто же все-таки решил перейти на 10-ку, — вот отличная рекомендация, когда использовать var:

Похожие статьи:
Компанія «Київстар» певний час активно створювала команду, яка б займалась злиттям і поглинанням (M&A). Через міжнародну рекрутингову...
Нові версії RStudio 1.0 .NET Core 1.1 Rust 1.13 Ansible 2.2 CMake 3.7.0 Mercurial 4.0 Red Hat Enterprise Linux 7.3 Fedora 25 Visual Studio for Mac Інтерв’ю ІТ Персона. Юрій Антонюк, голова...
От редакции: в рубрике DOU Books участники сообщества рассказывают о пяти любимых книгах — тех, которые меняют мировоззрение и могут...
[«Fail review» — это сборник историй о рабочих провалах: что произошло, как исправляли и какие выводы сделали. Если есть, чем...
18 жовтня стало відомо, що при виконанні бойового завдання загинув Юрій «Тай» Осадчук — співробітник компанії N-iX. Юрій...
Switch to Desktop Version