我正在建立一个基于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的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。