使用 OpenJDK 1.8 的 JavaFX 的 Maven 依赖项

Posted

技术标签:

【中文标题】使用 OpenJDK 1.8 的 JavaFX 的 Maven 依赖项【英文标题】:Maven dependency for JavaFX using OpenJDK 1.8 【发布时间】:2019-10-13 10:27:18 【问题描述】:

环境:

操作系统:为了开发和运行应用程序,将使用安装了 OpenJDK 1.8 和 Maven 的 Windows 10 Pro (1809) 和 Linux(类似于 Ubuntu 或 Debian)。 JDK: OpenJDK 1.8 IDE: IntelliJ Ultimate 构建工具 Maven(多模块项目,一个模块使用JavaFX) 我非常不想使用任何付费许可证(尽管对于这个项目,我可能可以免费使用 Oracle JDK...)。

问题:

我知道,JDK 1.8 应该包含 JavaFX。但是,对于 OpenJDK 1.8,不知何故,情况似乎并非如此(没有 Maven 依赖项,IntelliJ 不接受 import javafx.application.Application; 或任何其他 JFX 导入)。

出于这个原因,我试图将它作为 Maven 依赖项包含在内。如果我使用:

    <!-- JavaFX -->
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-controls</artifactId>
        <version>11</version>
    </dependency>
    .
    .
    .

我收到以下错误消息:

Error:(3, 26) java: cannot access javafx.application.Application
   bad class file: /C:/Users/kaspa/.m2/repository/org/openjfx/javafx- 
   graphics/11/javafx-graphics-11-win.jar!/javafx/application/Application.class
   class file has wrong version 54.0, should be 52.0
   Please remove or make sure it appears in the correct subdirectory of the 
   classpath.

使用&lt;version&gt;12&lt;/version&gt; 产生[...]wrong version 55.0, should be 52.0[...]

最低的&lt;version&gt;,Maven里面的&lt;dependency&gt;,我能用的好像是bo 11。

问题:

我可以向我的pom.xml 添加/更改一些内容以使我的应用程序编译和运行吗? 我是否绝对需要升级到 OpenJDK 11 或 12?

【问题讨论】:

你不能用 JDK 8 运行 JavaFX 11+。如果你真的需要保持在 8,我建议你使用已经捆绑了 JavaFX 的 JDK,那里有几个选项,或者您从 OpenJFX 安装 JavaFX 8(但不使用 Maven)。 我想知道是什么让您无法仅更新到 JDK 的当前版本 12。我的意思是这是一个严肃的问题,而不是批评。 @mipa:我个人?没有!我对新版本/技术非常开放,并且我会尽可能更新所有内容,尽管我知道这在大多数情况下会导致问题并耗费工时。 【参考方案1】:

首先,一些背景知识。从 Java 8 到 Java 10,Oracle JDK 曾经与 JavaFX 一起提供。但是,即使在这些版本中,JavaFX 也不是 OpenJDK 的一部分。从 Java 11 开始,JavaFx 也不再是 Oracle JDK 的一部分(就像 OpenJDK 一样)。

那么,你做错了什么?

您正在尝试使用 JDK 8 运行 JavaFX 11 和 12。这是不可能的。

你能做什么?

获取 openjfx 8。您可以从 source 构建它们,也可以在 Ubuntu 上通过 sudo-apt 安装它。

JavaFX 8 是否可用作 Maven 依赖项?

我不知道!

我的建议.. 如果您想使用 Java8 或升级到 Java 11 并使用 openJFX 作为 Maven 依赖项,请使用 Oracle JDK。

【讨论】:

我下载并安装了 Oracle JDK 8 但我仍然得到 javafx.application 等不存在错误。还有其他建议吗? 如果您将项目设置为使用 Java 8,heroku 将使用 OpenJDK 8。因此,不能只使用 Oracle JDK 8。某处必须有一个 Maven 依赖项,其中包括 java 8 级别的 javafx。对于 heroku,另一种选择是使用 buildpacks 来包含 javafx 8。但这对我来说还没有成功。 @gopala-krishna-char - 你能解释一下这将如何与使用 OpenJDK8 的项目一起工作吗? “获取 openjfx 8。您可以从源代码构建它们,也可以在 Ubuntu 上通过 sudo-apt 安装它。”

以上是关于使用 OpenJDK 1.8 的 JavaFX 的 Maven 依赖项的主要内容,如果未能解决你的问题,请参考以下文章

Java OpenJDK 中缺少 JavaFX

使用 gradle 6.3、OpenJDK 14 和 OpenJFX 14 部署 JavaFX 应用程序

为什么OpenJDK 8在使用Docker时没有拔出正确的JavaFX库?

打包JavaFX11桌面应用程序

我在哪里可以获得 OpenJDK(Windows)的预构建 JavaFX 库 [关闭]

错误:缺少 JavaFX 运行时组件 - JavaFX 11 和 OpenJDK 11 以及 Eclipse IDE