Eclipse Java 11看不到用于旧版本java 8的外部库

问题描述

我刚刚将eclipse项目从Java 8更新为Java11。但是我在该项目中使用了专为Java 8设计的外部库。我已经成功地将这些库导入到项目类路径中,就像以前一样,但是eclipse拒绝使用它们。当我尝试导入它们时,它会显示为错误,并显示消息“无法访问bla.bla.Foo类型” 。我还尝试将这些库导入到项目modulepath中,并在module-info.java中要求它们,以某种方式解决了该问题,但我仍然收到警告”“自动模块'SomeLib'的名称不稳定,它源自模块的文件名。“ ”当我尝试使用这些库中的对象时,总是会因为缺少'requirestransive'而无法从客户端访问模块SomeLib的Foo类型“

注意:我将OpenJDK 11与JavaFX 11一起使用。
注意:我要导入的库是https://github.com/PetoPetko/JavaFx-Image-Animation
注意:在com.sun ...包中的所有内容上,我也得到“ com.sun ...类型无法访问” ,但是我不确定是否与此相关解决这个问题。

解决方法

嗯,我设法以最原始的方式自己解决了这个问题... 我只是将JavaFX导入类路径,然后从每个JavaFx jar文件中手动删除module-info.class,从而使JavaFx不再模块化。然后,我使用提到的VM参数运行一个应用程序,一切都很好!
我相信你们中的许多人都能给我10个理由,为什么从现有的lib中删除module-info.class是一个坏主意,但是...如果可行,我仍然认为没有其他解决方案使我的非模块化项目可以与JavaFx 11一起使用。

,

您解决问题所采取的措施可以通过更简单的方式来实现。只需在包含您的主类(假定名称为MyApp)的文件中添加如下一行,然后通过调用MyAppLauncher.main而不是MyApp.main来启动您的应用。

class MyAppLauncher {public static void main(String[] args) {MyApp.main(args);}}

这样做是有效的,这样您就可以将所有jar放在类路径上,这样就可以完全忽略模块系统,而不必手动删除module-info.classes。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...