【问题标题】:JavaFX 11 development in both IntelliJ and Visual Studio CodeIntelliJ 和 Visual Studio Code 中的 JavaFX 11 开发
【发布时间】:2019-09-11 23:04:47
【问题描述】:

我正在建立一个基于 Java/JavaFX 11 的 Maven 项目,它应该可以在 IntelliJ 和 Visual Studio Code 中进行编辑。

我的 JDK 是来自 https://adoptopenjdk.net/ 的 11.0.3 (Windows x64)。

pom.xml 依赖于

<dependency>
    <groupId>org.openjfx</groupId>
    <artifactId>javafx-controls</artifactId>
    <version>11.0.2</version>
</dependency>

我的应用程序可以在 IntelliJ 中使用“compiler:compile”和“exec:java”编译和运行。所以第一步成功了。

现在在 Visual Studio 中打开同一个项目时编译和运行不成功并出现很多类似的错误消息

The package javafx.scene.chart is accessible from more than one module: <unnamed>, javafx.controls

我在 .vscode 中添加了一个 settings.json 文件以指向正确的 JDK 目录。

 {
    "java.dependency.packagePresentation": "hierarchical",
    "java.home": "C:/Program Files/Java/jdk-11.0.3+7",
    "java.configuration.updateBuildConfiguration": "automatic"
 }

但似乎 VSC 的两个 JavaFX 版本仍然存在问题,或者没有使用正确的 JDK。在“Java Dependencies”视图中,我可以看到“JRE System Library”和“Maven”对 JavaFX 的引用。有没有办法可以将它们从 JRE 视图中排除?

JavaFX 引用如何在 VSC 中显示的屏幕截图:

【问题讨论】:

  • 您是说 AdoptOpenJdk 的 JDK 包含 JavaFX 模块吗?我不认为是这样,JavaFX 不包括在内。您下载的究竟是哪个发行版?
  • @JoséPereda 确实据我所知 JavaFX 不是 JDK 的一部分(Liberica 的 Pi 版本除外,请参阅 bell-sw.com/pages/java-12.0.1)。我将我的发行版添加到问题(Windows x64)和 VSC 中依赖项的屏幕截图。
  • 确实,AdoptOpenJDK 不包括 JavaFX(我在 Mac 和 Windows 上检查过),所以最后的屏幕截图令人困惑(我得到 Maven 依赖于 JavaFX 和没有 JavaFX 的 JRE 系统库)。您能否在 Windows 资源管理器中验证您的 jdk-11.0.3+7/jmods 文件夹没有 JavaFX jmods?
  • jmods 中没有 fx,所以你是对的。认为我的机器上有太多 JDK 版本,这让 VSC 感到困惑。稍后将在另一台机器上尝试。如果我从 pom.xml 中删除 fx 依赖项,我可以启动并运行应用程序。所以这让它更加混乱:-)
  • 看起来您已经安装了带有 JavaFX 的 JDK 11(您提到了 Liberica,他们确实在 Windows 上也集成了 JavaFX,而不仅仅是在 ARM 上),并且 VSC 正在以某种方式使用它?

标签: maven visual-studio-code java-11 javafx-11


【解决方案1】:

根据发布的最后一个屏幕截图,您似乎使用的是确实包含 JavaFX 的 JDK 11。

虽然大多数 JDK 发行版不包含 JavaFX(OpenJDK、Oracle、AdoptOpenJDK 等),但一些供应商正在将 JavaFX 与 JDK 捆绑在一起,例如 Liberica。

如果您查看 Liberica 的 JDK 发行说明11.0.2

Windows x86_64、Mac、Linux x86_64 和 Linux ARMv7 发行版包含 OpenJFX 11.0.2。

虽然此选项简化了 JavaFX 的使用(无需将其添加到模块路径,因为它已经是其中的一部分),但如果您使用 Maven 或 Gradle 构建工具并包含 JavaFX 依赖项,则可能会造成混淆,或者如果您没有安装其他 JDK。

所以修复很简单:要么使用不带 JavaFX 的 JDK,并通过 Maven/Gradle 依赖项提供它,要么使用带 JavaFX 的 JDK,不包含它们。

我猜后者是首选选项,以防您需要导出/共享您的项目,因为其他人可能没有相同的设置。它还使其对 JavaFX 的新版本更加灵活。

顺便说一句,请注意,您可以按照 https://openjfx.io/openjfx-docs/#modular 中的说明,自定义 JDK+JavaFX 映像部分来生成自己的捆绑 JavaFX 的 JDK。

【讨论】:

猜你喜欢
  • 2011-12-05
  • 2021-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-06
  • 2018-12-05
相关资源
最近更新 更多