Как добавить maven-зависимости json в модули в>= Java 9

В java 8 проектах вы просто добавляете следующие зависимости в maven

<dependency>
    <groupId>javax.json</groupId>
    <artifactId>javax.json-api</artifactId>
    <version>1.1</version>
</dependency>
<dependency>
    <groupId>org.glassfish</groupId>
    <artifactId>javax.json</artifactId>
    <version>1.1</version>
</dependency>

Использование OpenJDK, Eclipse 2018-12
и модуль maven, это приводит к получению ошибки в module-info.java:

Пакет javax.json.stream доступен из нескольких модулей: java.json, org.glassfish.java.json

Таким образом, в обоих проектах зависимостей есть пакет с именем javax.json.stream, и из-за системы модулей Jigsaw это больше не разрешено?

Как это исправить?

РЕДАКТИРОВАТЬ:
Я обновил зависимость maven до 1.1.4 и поместил их в путь к классам. javax.json-api имеет файл module-info.java и работает нормально, eclipse не показывает больше ошибок.
Но теперь пакеты реализации javax.json (org.glassfish) не найдены, в результате чего ClassNotFoundException: org.glassfish.json.JsonProviderImpl

Что еще я могу сделать?

РЕДАКТИРОВАТЬ:
Это работает сейчас, я забыл сгенерировать module-info.java в этом проекте.

1 ответ

Решение

Таким образом, в обоих проектах зависимостей есть пакет с именем javax.json.stream, и из-за системы модулей Jigsaw это больше не разрешено?

Это все еще разрешено, но обе эти зависимости разрешаются на пути к классам, а не на пути к модулям, т.е. в безымянном модуле.

Еще одна альтернатива, чтобы исправить это, пока вы создаете свою библиотеку как модульную, состоит в том, чтобы убедиться, что вы исправили нижестоящие библиотеки, экспортирующие тот же пакет, что потребовало бы восходящей миграции, и вам, возможно, придется подождать, пока они исправят это в своем последнем обновлении (или проверить, если один уже отсутствует), а затем положиться на них.

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