Имя модуля JsonSchemaValidator перепутано Maven и Eclipse

У меня возникли проблемы с созданием проекта Maven Eclipse для сборки как в Maven, так и в Eclipse. Проблема, по-видимому, заключается в том, что библиотека проверки JSON com.networknt хочет быть обязательной (в модуле-info.java), как требует com.networknt.schema в Maven, но как требует json.schema.validator в Eclipse (как проект Maven) . Каждая сборка просто не сможет увидеть модуль, если он назван по-другому. Я могу выполнять сборку в Eclipse, если «запускаю как сборку maven...», но это не помогает кодированию, отладке тестов JUnit и т. д.

У меня в поме есть следующее:

<dependency>
  <groupId>com.networknt</groupId>
  <artifactId>json-schema-validator</artifactId>
  <version>1.4.3</version>
</dependency>

Я использую 1.4.3 из https://mvnrepository.com/artifact/com.networknt/json-schema-validator

Кто-нибудь знает, что здесь?

com.networknt:json-schema-validator:1.4.3 — это многовыпускной JAR , в котором module-info.class не включен в корень JAR, а является META-INF/versions/9/module-info.class. module-info.class скомпилирован как байт-код Java 9, остальные — как байт-код Java 8. Eclipse, похоже, не поддерживает это. Подробности и обходной путь смотрите в моем комментарии здесь.
howlger 08.07.2024 20:02

Eclipse не может это поддерживать (и не должен), потому что module-info.class должен находиться в корне файла jar... Также я бы проверил самую последнюю версию: Central.sonatype.com/artifact/com .networknt/… версия 1.5.0, это проблема jar json-schema-validator... или проекта, стоящего за ней... Создал проблему для проекта: github.com/networknt/json-schema-validator /issues/1089

khmarbaise 08.07.2024 20:35

@howlger - это именно то! Обходной путь тоже сработал - спасибо! Можете ли вы создать свой ответ как ответ, чтобы я мог его принять, пожалуйста :)

fig 08.07.2024 20:50

PS Понятия не имею, почему кто-то проголосовал против меня из-за проблемы в Eclipse, но неважно.

fig 08.07.2024 20:51

@khmarbaise Насколько я понимаю, JEP 238 позволяет дескриптору модуля module-info.class располагаться только в META-INF/versions/9, а не в корне: «Модулю с несколькими выпусками не обязательно иметь дескриптор модуля в расположенном корне. В этом отношении модуль Дескриптор не будет обрабатываться так же, как любой другой класс или файл ресурсов. Это может гарантировать, что, например, в корневой области будут присутствовать только классы с версиями Java 8, в то время как классы с версиями Java 9 (включая дескриптор модуля) будут присутствовать в версии 9. область."

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

Ответы 1

Ответ принят как подходящий

json-schema-validator-1.4.3.jar представляет собой многовыпускной JAR-файл, в котором module-info.class не включен в корень JAR, а является META-INF/versions/9/module-info.class. Файл module-info.class скомпилирован с помощью Java 9, а остальные — с Java 8. Таким образом, его можно использовать с Java 8, а также как модульный JAR с Java 9 и выше.

Кажется, Eclipse пока не поддерживает это: Основная проблема Eclipse JDT № 2495: JAR с несколькими выпусками не распознается как таковой

В качестве обходного пути выполните одно из следующих действий:

  • В json-schema-validator-1.4.3.jar скопируйте module-info.class из META-INF/versions/9/ в корень
  • В META-INF/MANIFEST.MF добавьте строку Automatic-Module-Name: com.networknt.schema

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