是什么让 Maven 想要 Openjfx 和 Zulu Java 11,而不是 Zulu Java 8 用于 Spring Boot 项目?

2022-09-04 20:04:24

我继承了一个Spring Boot项目,由于Java 9和10(和)中添加了很好的功能,我们希望使用Java 11进行测试。varList.of(...)

Maven 项目分为几个部分,其中生产代码是为 Java 8 设置的,测试代码是为 Java 11 设置的。这在模块基础上单独工作得很好,全局构建可以与Java 8(除了无法编译的测试)和Java 10一起使用。

现在我想使用Java 11从根目录编译所有内容,因为这是LTS(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 Boot微服务,会让我有点惊讶)。因此,这个问题。

是什么原因导致它,我该如何解决?


正如Karol正确推断的那样,这个问题以前见过,修复方法是将休眠验证器依赖项升级到较新版本。我所需要的只是将以下属性添加到我的父 pom 中:

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

答案 1

这可能是由于 HV-1644 将 Hibernate Validator 与 Java 11 结合使用会导致 JavaFX 出现在类路径上(如果它是依赖项的一部分)。更新到或更新应该可以解决这个问题。org.hibernate.validator:hibernate-validator:jar:6.0.11.Final6.0.12


答案 2

最近,我在使用带有JDK 11的Maven构建工件时遇到了同样的问题。指定了一些依赖项来使用工件(JavaFX,它不再是Java 11的一部分)。所以 Maven 一直想下载这个工件,事实上,在我们的 Maven 存储库中并不存在这个工件。因此,构建随后失败了,就像依赖关系树的分析一样。我无法确定,这个工件将在哪里使用。org.openjfx:javafx.base:11.0.0-SNAPSHOT

我在谷歌上搜索了这个工件的用法,并在Maven JIRA中发现了这个关于Hibernate的错误问题:Java 11(MNG-6500)的依赖关系解决方案被破坏了

据说在Hibernate 6.0.11中,这个工件是在 的 POM 中指定的。但是我不知道在我的项目中使用这个Hibernate依赖项。我在整个本地 Maven 存储库中搜索了此工件。令人惊讶的是,上面提到的Hibernate工件被使用(它在指定了版本的父链中有一个父级)。而这种依赖关系又被 .org.hibernate.validator:hibernate-validator:6.0.11.Finalorg.glassfish.jersey.ext:jersey-bean-validation:jar:2.28org.glassfish.jersey:project:2.28hibernate-validatorio.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>

推荐