IntelliJ 和 Visual Studio 代码中的 JavaFX 11 开发
JavaFX 11 development in both IntelliJ and Visual Studio Code
我正在建立一个基于 Java/JavaFX 11 的 Maven 项目,它应该可以在 IntelliJ 和 Visual Studio 代码中编辑。
我的 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 编译中打开同一个项目时 运行ning 不会成功并出现很多类似的错误消息
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 中显示的屏幕截图:
根据上次发布的屏幕截图,您似乎正在使用 包含 JavaFX 的 JDK 11。
虽然大多数 JDK 发行版不包含 JavaFX(OpenJDK、Oracle、AdoptOpenJDK 等),但一些供应商将 JavaFX 与 JDK,像利比里亚。
如果您查看 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 依赖项,或者如果您安装了其他 JDKs 而没有它。
因此修复很简单:要么在没有 JavaFX 的情况下使用 JDK 并通过 Maven/Gradle 依赖项提供它,要么在 JavaFX 中使用 JDK 并且不包含它们。
我想后者是首选,以防您需要 export/share 您的项目,因为其他人可能没有相同的设置。它还使新版本的 JavaFX 更加灵活。
顺便说一句,请注意,您可以按照 https://openjfx.io/openjfx-docs/#modular 自定义 JDK+JavaFX 图像部分的说明生成自己的捆绑 JavaFX 的 JDK。
我正在建立一个基于 Java/JavaFX 11 的 Maven 项目,它应该可以在 IntelliJ 和 Visual Studio 代码中编辑。
我的 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 编译中打开同一个项目时 运行ning 不会成功并出现很多类似的错误消息
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 中显示的屏幕截图:
根据上次发布的屏幕截图,您似乎正在使用 包含 JavaFX 的 JDK 11。
虽然大多数 JDK 发行版不包含 JavaFX(OpenJDK、Oracle、AdoptOpenJDK 等),但一些供应商将 JavaFX 与 JDK,像利比里亚。
如果您查看 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 依赖项,或者如果您安装了其他 JDKs 而没有它。
因此修复很简单:要么在没有 JavaFX 的情况下使用 JDK 并通过 Maven/Gradle 依赖项提供它,要么在 JavaFX 中使用 JDK 并且不包含它们。
我想后者是首选,以防您需要 export/share 您的项目,因为其他人可能没有相同的设置。它还使新版本的 JavaFX 更加灵活。
顺便说一句,请注意,您可以按照 https://openjfx.io/openjfx-docs/#modular 自定义 JDK+JavaFX 图像部分的说明生成自己的捆绑 JavaFX 的 JDK。