是什么让 Maven 想要 openjfx with Zulu Java 11 而不是 Zulu Java 8 作为 Spring Boot 项目?

What makes Maven want openjfx with Zulu Java 11 and not Zulu Java 8 for a Spring Boot project?

我继承了一个 Spring 引导项目,我们想在其中使用 Java 11 进行测试,因为 Java 9 和 10 中添加了不错的功能(varList.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-SNAPSHOT

[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 引导微服务,这会让我有点惊讶)。因此这个问题。

是什么原因造成的,我该如何解决?


正如 Karol 正确推断的那样,这个问题之前已经出现,解决方法是将 hibernate 验证器依赖项升级到更新的版本。我所需要的只是将以下 属性 添加到我的父 pom:

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

如果 org.hibernate.validator:hibernate-validator:jar:6.0.11.Final 是您的依赖项的一部分,这可能是由 HV-1644 Using Hibernate Validator with Java 11 brings JavaFX on the classpath 引起的。更新到 6.0.12 或更高版本应该可以解决它。

最近我 运行 遇到了使用带有 JDK 11 的 Maven 构建工件的相同问题。指定了一些依赖项以使用工件 org.openjfx:javafx.base:11.0.0-SNAPSHOT (JavaFX ,不再是 Java 11) 的一部分。所以 Maven 一直想下载这个工件,实际上它不存在于我们的 Maven 存储库中。因此,构建随后失败,对依赖树的分析也是如此。我无法确定,这个神器将被用在什么地方。

我在谷歌上搜索了这个工件的用法,并在 Maven JIRA 中发现了这个关于 Hibernate 的错误问题:Dependency resolution broken with Java 11 (MNG-6500)

据说在 Hibernate 6.0.11 中这个工件是在 org.hibernate.validator:hibernate-validator:6.0.11.Final 的 POM 中指定的。但是我不知道在我的项目中有任何使用此 Hibernate 依赖项的情况。我在整个本地 Maven 存储库中搜索了这个工件。令人惊讶的是,org.glassfish.jersey.ext:jersey-bean-validation:jar:2.28(它在指定 hibernate-validator 的版本的父链中有一个父链 org.glassfish.jersey:project:2.28)使用了提到的 Hibernate 工件。而这个依赖又被io.confluent:kafka-schema-registry:jar:5.4.0.

使用了

所以我唯一要做的就是io.confluent:kafka-schema-registry:jar:5.4.0依赖项中排除这个JavaFX工件

<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>