JavaFX16:不支持的 JavaFX 配置:从“未命名模块 @...”加载类

问题描述

我在 IntelliJ 上有一个 Maven 多模块项目,它生成 3 个 jar,其中 2 个是可执行文件,另一个用于公共资源。

其中一个可执行模块有一个主类,询问用户是想使用 CLI 还是 GUI 启动程序。

从 IntelliJ 运行这个 main 没有问题,而是当我使用 Maven 制作 jar(使用 Maven 阴影)时:

mvn package -pl myModule -am

然后使用 GUI 选项启动 jar,出现此警告:

com.sun.javafx.application.PlatformImpl startup
WARNING: Unsupported JavaFX configuration: classes were loaded from 'unnamed module @...'

GUI 启动时没有问题。

我怎样才能摆脱这个警告? 我的项目的 JDK 是 openJDK 16(为了使用 javafx,我已经添加module-info.java)、openJFX 16、maven shade 插件 3.2.4、maven 编译器插件 3.8.1。

如果需要添加更多信息,我会添加它们。

解决方法

maven 似乎正在将 JavaFX jars 遮蔽成一个单一的 fat jar。

将多个模块着色到同一个 jar 中是不可能的,因为一个 jar 只能包含 1 个模块。所以,我想 shade 插件通过删除它所使用的依赖项的模块信息文件来解决这个问题,这意味着 JavaFX 代码不会作为模块加载,你会收到这样的警告。

我认为摆脱警告的唯一方法是不使用阴影,而是将 JavaFX 模块保留为单独的 jar 文件,然后在运行应用程序时将其放在模块路径上。