IntelliJ和Visual Studio Code中的JavaFX 11开发

问题描述 投票:2回答:1

我正在建立一个基于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依赖关系”视图中,我可以看到从“JRE系统库”和“Maven”到JavaFX的引用。有没有办法可以将它们排除在JRE视图之外?

屏幕截图显示了VSC中JavaFX引用的显示方式:

JavaFX references from Maven

JavaFX references from JRE

maven visual-studio-code java-11 javafx-11
1个回答
2
投票

根据发布的最后一个截图,您似乎正在使用包含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依赖提供它,要么使用JDK和JavaFX,不要包含它们。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.