java - OpenJdK 8 - 无法编译包 javafx.util 不存在

标签 java java-8 openjfx

Linux Mint 20.3
   os.name = Linux
   os.arch = amd64
   os.version = 5.13.0-25-generic



 Java : 
    openjdk version "1.8.0_322"
    OpenJDK Runtime Environment (build 1.8.0_322-b06)
    OpenJDK 64-Bit Server VM (build 25.322-b06, mixed mode)

Maven 3.8.3

我通过 Maven 构建我的 java 项目。

当我尝试通过OpenJdk 1.8.0_322编译我的java项目时:

  package com.myproject;
    
    import java.util.Collection;
    import java.util.List;
    import java.util.Map;
    
    
    import javafx.util.Pair; //  here error
    
    @SuppressWarnings("rawtypes")
    public interface SomeMyInterface {
      // some code here
      Map<Integer, List<Pair<Integer,Integer>>> findAllMgIdsAssociatedNsPairs();
    }

我收到错误:

[ERROR] COMPILATION ERROR : 
[INFO] -------------------------------------------------------------
[ERROR] /SomeMyInterface.java:[10,19] package javafx.util does not exist

附注如果我使用来自Oraclejdk1.8.0_202,项目成功编译!

P.P.S。该项目必须由java 8编译。这是客户的要求。

最佳答案

tl;博士

或者:

  • 在包含 OpenJFX 库的 JDK 上进行开发/部署。
  • OpenJFX库添加到您的Java项目中。

详细信息

JavaFX从未成为 Java SE 的正式组成部分。

有一段时间,Oracle 将其 JavaFX 库与 JDK 一起包含在内。他们后来停止捆绑销售。

您需要将 JavaFX 的实现添加到您的项目中。你会在 OpenJFX 中找到这样的实现。该开源项目位于 a subproject on the OpenJDK该项目由 Gluon 和 Oracle 共同领导。

使用您选择的依赖项管理器(例如 Apache Maven 或 Gradle)将 OpenJFX 库添加到您的项目中。下面我放置了 OpenJFX 11 到 17 的 Maven 存储库链接,但这些链接需要 Java 11+。我没有找到任何 JavaFX/OpenJFX for Java 8 的 Maven 存储库链接。

或者,您可以在捆绑 OpenJFX 库的 JDK 上进行开发并部署到该 JDK。至少有两家供应商提供带有此类 bundle 的 JDK 产品版本:

  • ZuluFX 作者:Azul Systems
    • 参见this downloads list适用于 macOS、Linux 和 Windows 上的 Java 8。请注意下载列表顶部的Java Package过滤器字段。
  • LibericaFX 由 BellSoft 提供
    • 关于Downloads page ,为捆绑 OpenJFX 的版本选择完整选项。适用于 macOS、Linux 和 Windows 上的 Java 8。

如果可能的话,考虑放弃 Java 8。我建议迁移到 Java 的最新 LTS 版本 11 和 17,以及 OpenJFX 的最新 LTS 版本 17,它需要 Java 11 或更高版本。近年来,Java 和 JavaFX 都取得了长足的发展。此演变包括 jlinkjpackage用于将 JavaFX 应用程序打包为单个“可双击”应用程序的工具,其中包含在特定平台上运行所需的 JDK/JVM 的最少部分。

版本

对于 OpenJFX 版本 11 到 17,需要/建议使用 Java 11 或更高版本。请参阅Release Notes .

OpenJFX 11 到 18 的 Maven 链接可以是 found here ,以及其他 Maven 存储库。

OpenJFX 版本 14 到 18 的源代码可以是 found on GitHub网站 OpenJDK 。旧版本 2、8、9 和 10 的源代码可以在只读 Mercurial 上找到。 OpenJDK 的存储库。

关于java - OpenJdK 8 - 无法编译包 javafx.util 不存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71037278/

相关文章:

java - 创建并填充可变大小的二进制真值表

java - 如何解决问题 "Expected BEGIN_ARRAY but was STRING at line 1 column 1 path $"

java - 为什么 Apache Commons VFS 考虑 Http Proxy 和 Socks5 Proxy 而忽略 Socks4 Proxy?

java - 如何在Java中使用Optional?

JavaFX 11 部署失败 : failed to create task or type javafx:com. sun.javafx.tools.ant:fileset

java - Java 方法的编程性能

java - 每个 android 的 ConcurrentModificationException

java-8 - 是否可以在 Java8 流中重写此类代码?

JavaFX 14,堆积条形图不显示负值

java - 使用 javafxplugin 和 hibernate 时无法在 IDE 外部运行 JavaFX 应用程序