Миграция Wiremock/Elasticsearch с Java8 на Java9/Java11

В настоящее время я переношу приложение с openJDK 8 на openJDK 9/11. В проекте используется Maven 3.5.2 (также пробовал с 3.6). Я использую Ubuntu 18.04 в качестве основной ОС. Моя IDE — IntelliJ IDEA 2018.3.2.

После добавления module-info.java большинство зависимостей maven отлично работали с

requires ${module.name}

У меня проблемы с elasticsearch и wiremock. Требуя их, я получаю «модуль не найден»

В pom.xml они включали следующее:

<dependency>
    <groupId>com.github.tomakehurst</groupId>
    <artifactId>wiremock</artifactId>
    <version>1.58</version>
    <exclusions>
        <exclusion>
            <groupId>org.mortbay.jetty</groupId>
            <artifactId>servlet-api</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.mortbay.jetty</groupId>
            <artifactId>jetty</artifactId>
        </exclusion>
    </exclusions>
    <classifier>standalone</classifier>
</dependency>
<dependency>
    <groupId>org.elasticsearch</groupId>
    <artifactId>elasticsearch</artifactId>
    <version>1.3.2</version>
</dependency>

Требуя wiremock в module-info.java

module com.mydomain {
    requires guava;
    ...
    ...
    requires wiremock;
    requires elasticsearch;

    exports com.mydomain.p1;
    exports com.mydomain.p2;
}

С версией wiremock<version>1.58</version> в pom.xml во время компиляции я получаю

[WARNING] Can't extract module name from mysql-connector-mxj-5.0.12.jar: TestDb.class found in top-level directory (unnamed package not allowed in module)
[WARNING] Can't extract module name from wiremock-1.58-standalone.jar: Provider class com.fasterxml.jackson.core.JsonFactory not in module
[WARNING] Can't extract module name from ical4j-3.0.1.jar: Provider class moduleName = ical4j-module not in module
[WARNING] Can't extract module name from elasticsearch-1.3.2.jar: Provider class com.fasterxml.jackson.core.JsonFactory not in module
[WARNING] ********************************************************************************************************************
[WARNING] * Required filename-based automodules detected. Please don't publish this project to a public artifact repository! *
[WARNING] ********************************************************************************************************************
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.0:compile (default-compile) on project project: Compilation failure: Compilation failure: 
[ERROR] /home/artem/Documents/project/src/main/java/module-info.java:[95,14] module not found: wiremock
[ERROR] /home/artem/Documents/project/src/main/java/module-info.java:[97,14] module not found: elasticsearch

Обновление до новых версий не помогает. При использовании wiremock с <version>2.1.6</version> или выше Intellij говорит module not found:

requires commons.lang;
requires json;

И

[ERROR] Failed to execute goal on project project: Could not resolve dependencies for project com.mydomain:project:jar:0.0.1-SNAPSHOT: Failure to find com.github.tomakehurst:wiremock:jar:standalone:2.21.0 in https://repository.mulesoft.org/nexus/content/repositories/public was cached in the local repository, resolution will not be reattempted until the update interval of codehaus-release-repo has elapsed or updates are forced

Да, в основном это. Если ошибка возникает при выполнении службы, просто проверьте, какие все модули имеют решается при запуске, и вы ее найдете. Если во время компиляции, убедитесь, что вы добавили требования для wiremock, а также в файл module-info.java.

Naman 11.02.2019 14:41

@nullpointer Да, это во время компиляции. Когда я требую wiremock в module-info.java во время компиляции, он говорит module not found

Arttu 11.02.2019 14:46

Пожалуйста, обновите вопрос с полной информацией. Я могу добавить зависимость к версии wiremock, которая используется в вопросе, хотя это приводит к конфликтам разделенных пакетов с com.google.common в моем пути к модулям. Что вы имели в виду под версия 2 и выше ломает другие модули, такие как ?

Naman 11.02.2019 14:53

@nullpointer Я попытался лучше структурировать свой вопрос. и после вашего комментария я сделал тестовый проект и действительно могу потребовать wiremock. Но только до тех пор, пока я не импортирую что-нибудь из wiremock. Например импорт wiremock.com.google.common.collect.Lists;. После этого импорта я получаю [ERROR] Failed to execute goal on project devday: Could not resolve dependencies for project de.consol:devday:jar:1.0-SNAPSHOT: Could not find artifact com.google.common:google-collect:jar:1.0-rc1 in central (https://repo.maven.apache.org/maven2)

Arttu 11.02.2019 16:09

Вы пробовали с WireMock 2.21.0. Как описано в списке рассылки WireMock, эта версия выпущена с поддержкой Java JDK 1.7 и 1.8+. Возможно эта поддержка WM 2.21.0 для 1.8 выпуск вам поможет

A. Kootstra 11.02.2019 16:49

@ А.Кутстра, да, не повезло.

Arttu 12.02.2019 08:18
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
6
1 101
0

Другие вопросы по теме