Что заставляет Maven использовать openjfx с Zulu Java 11, а не Zulu Java 8 для проекта Spring Boot?

Я унаследовал проект Spring Boot, в котором мы хотели бы использовать Java 11 для тестирования из-за хороших функций, добавленных в Java 9 и 10 (var и List.of(...)).

Проект Maven разделен на несколько частей, где код для производства настроен для Java 8, а тестовый код для Java 11. Это хорошо работает индивидуально на модульной основе, а глобальная сборка работает с Java 8 (за исключением неудачных тестов). для компиляции) и Java 10.

Теперь я хочу скомпилировать все из корня, используя Java 11, поскольку это LTS (Zulu, как это в Windows 10), и по какой-то причине Maven теперь хочет использовать org.openjfx:javafx.base:jar:11.0. 0-СНИМОК

[INFO] Building mumble-data-service-parent 1.0.0-SNAPSHOT              
[1/8]
[INFO] --------------------------------[ pom ]---------------------------------
[WARNING] The POM for org.openjfx:javafx.base:jar:11.0.0-SNAPSHOT is missing, no dependency information available
[INFO]

Поскольку зависимости не удовлетворены, я не могу (по крайней мере, так, как я могу придумать) заставить Maven сказать мне, почему он хочет это сделать, поэтому я понятия не имею, где искать, и проект в первую очередь не ссылается на javafx (будучи микросервисом Spring Boot, который меня немного удивит). Отсюда этот вопрос.

Чем это вызвано и как это исправить?


Как правильно понял Кароль, эта проблема уже встречалась ранее, и исправление заключалось в обновлении зависимости валидатора гибернации до более новой версии. Все, что мне нужно было, это добавить следующее свойство к моему родительскому pom:

    <!-- needed for building with Java 11 -->
    <hibernate-validator.version>6.0.12.Final</hibernate-validator.version>

person Thorbjørn Ravn Andersen    schedule 18.12.2018    source источник
comment
Будет создана награда в 500 баллов, когда мне будет позволено. Если проблема будет решена до этого, вознаграждение достанется этому ответу.   -  person Thorbjørn Ravn Andersen    schedule 18.12.2018
comment
так почему это не работает на 11 - потому что в 11 java javaFX больше не является частью JDK, а является автономным модулем. Я думаю, вы можете добавить его с помощью maven и проверить, помогает ли это. А почему его нет - может это какая-то транзитивная зависимость? не могли бы вы поделиться файлом сборки   -  person Alex G.    schedule 18.12.2018
comment
@ ThorbjørnRavnAndersen Вы должны поделиться тем, как выглядит pom.xml вашего текущего модуля mumble-data-service-parent. Вот где можно начать искать причину. Кроме того, если у него есть parent, это может быть связано с управлением зависимостями. Или, возможно, ссылка на проект/MCVE для воспроизведения ошибки, о которой вы только что заявили, еще больше улучшит вопрос.   -  person Naman    schedule 18.12.2018
comment
Stackoverflow, к сожалению, не позволит мне прикрепить вывод help: Effective-pom к вопросу :-/   -  person Thorbjørn Ravn Andersen    schedule 18.12.2018


Ответы (2)


Это может быть вызвано тем, что HV-1644 Использование Hibernate Validator с Java 11 приводит JavaFX к пути к классам если org.hibernate.validator:hibernate-validator:jar:6.0.11.Final является частью ваших зависимостей. Обновление до 6.0.12 или новее должно решить эту проблему.

person Karol Dowbecki    schedule 18.12.2018
comment
Я знаю, что JavaFX больше не является частью JDK. Насколько я понимаю, наши модули не ссылаются на javafx, поэтому я не понимаю, почему Maven хочет его использовать. Зависимость может ссылаться на него, но mvn dependency:tree, который работает с Java 10, не упоминает ни javafx, ни openjfx. Поэтому я понятия не имею, где сделать предлагаемое изменение. - person Thorbjørn Ravn Andersen; 18.12.2018
comment
@ ThorbjørnRavnAndersen Попробуйте mvn help:effective-pom посмотреть среду выполнения pom.xml, может быть, это зависимость от плагина? Невозможно отладить это, не видя ваш эффективный pom.xml. - person Karol Dowbecki; 18.12.2018
comment
comment
Я не могу прикрепить вывод из help: Effective-pom, поскольку stackoverflow не работает при попытке сохранить очень большое редактирование, и у меня нет непосредственного места для его размещения. Однако эта точная зависимость от спящего режима находится там (вероятно, подтянутая весенней загрузкой). Я посмотрю поближе. Спасибо, пока. - person Thorbjørn Ravn Andersen; 18.12.2018
comment
Ваш вывод был правильным. Я принял ваш ответ. Если награда не будет присуждена в течение следующих дней, пожалуйста, напомните мне. - person Thorbjørn Ravn Andersen; 18.12.2018
comment
Отличная помощь .. Я застрял на этом на неделю ... спасибо - person Learner; 14.05.2020

Недавно я столкнулся с той же проблемой при создании артефакта с помощью Maven с JDK 11. Была указана некоторая зависимость для использования артефакта org.openjfx:javafx.base:11.0.0-SNAPSHOT (JavaFX, который больше не является частью Java 11). Итак, Maven всегда хотел загрузить этот артефакт, которого на самом деле не было в нашем репозитории Maven. Таким образом, построение впоследствии потерпело неудачу, как и анализ дерева зависимостей. Я не мог определить, где этот артефакт будет использоваться.

Я погуглил об использовании этого артефакта и нашел эту проблему с ошибкой в ​​​​Maven JIRA о Hibernate: с Java 11 (MNG-6500).

Там сказано, что в Hibernate 6.0.11 этот артефакт был указан в POM org.hibernate.validator:hibernate-validator:6.0.11.Final. Но я не знал об использовании этой зависимости Hibernate в моем проекте. Я обыскал весь локальный репозиторий Maven в поисках этого артефакта. И что удивительно, упомянутый артефакт Hibernate использовался org.glassfish.jersey.ext:jersey-bean-validation:jar:2.28 (у которого есть родитель org.glassfish.jersey:project:2.28 в родительской цепочке, где указана версия hibernate-validator). И эту зависимость в свою очередь использовал io.confluent:kafka-schema-registry:jar:5.4.0.

Поэтому единственное, что мне нужно было сделать, это исключить этот артефакт JavaFX из io.confluent:kafka-schema-registry:jar:5.4.0 зависимости:

<dependency>
    <groupId>io.confluent</groupId>
    <artifactId>kafka-schema-registry</artifactId>
    <version>5.4.0</version>
    <exclusions>
        <exclusion>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx.base</artifactId>
        </exclusion>
    </exclusions>
</dependency>
person Adi Wehrli    schedule 23.01.2020
comment
В библиотеке Confluent есть некоторые комментарии по поводу этой проблемы, которые включают hibernate-validator: github .com/confluentinc/rest-utils/issues/170 - person Sean Glover; 10.02.2020