maven - IntelliJ 和 Visual Studio Code 中的 JavaFX 11 开发

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

我正在建立一个基于 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” View 中,我可以看到“JRE System Library”和“Maven”对 JavaFX 的引用。有什么方法可以将它们从 JRE View 中排除?

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

JavaFX references from Maven

JavaFX references from JRE

最佳答案

根据上次发布的屏幕截图,您似乎使用的是 包含 JavaFX 的 JDK 11。

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

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

Windows x86_64, Mac, Linux x86_64 and Linux ARMv7 distributions contain OpenJFX 11.0.2.

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

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

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

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

关于maven - IntelliJ 和 Visual Studio Code 中的 JavaFX 11 开发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55799741/

相关文章:

带有 Maven 的 Java 11/12 Javadoc 导致不为测试生成 Javadoc

java - 可以避免 google 端点 URL 中的版本号

java - Eclipse 使用Maven更改项目版本?

maven - 如何让 Jenkins 构建正确的 .war 文件?

c - 找不到 VsCode crtdbg.h,如何解决?

java - Java 11 中的解析异常

java - Struts2-tiles-plugin 2.3.28 - StrutsTilesListener 抛出 NullPointerException

visual-studio-code - VSCode远程ssh--如何自动安装扩展

visual-studio-code - 如何将 Visual Studio Code 降级到 0.9.1

jackson 数据绑定(bind) : Cannot construct instance of `java.time.OffsetDateTime`