Eclipse Java 11 看不到旧版本的外部库 (java 8)
Eclipse Java 11 do not see external libs that were for older version (java 8)
我刚刚将我的 eclipse 项目从 java 8 更新到 java 11。但是我在这个项目中使用了专为 java 8 设计的外部库。我已经成功像以前一样将这些库导入到项目类路径中,但 Eclipse 只是拒绝使用它们。当我尝试导入它们时,它会将其突出显示为错误消息 “类型 bla.bla.Foo 不可访问”。我还尝试将这些库导入项目 modulepath 并在 module-info.java 中需要它们,这以某种方式解决了问题,但我仍然不断收到警告 "自动模块名称 'SomeLib' 是不稳定,它是从模块的文件名派生的。" 和 "由于缺少 'requires transitive'",客户端可能无法访问模块 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 个理由,为什么从现有库中删除 module-info.class
是个坏主意,但是...如果可行,但我仍然认为没有其他解决方案使我的非模块化项目与 JavaFx 11 一起工作。
您为解决问题所做的工作可以通过更简单的方式实现。只需将如下一行添加到包含您的主要 class(假设名称 MyApp)的文件中,然后通过调用 MyAppLauncher.main 而不是 MyApp.main.
来启动您的应用程序
class MyAppLauncher {public static void main(String[] args) {MyApp.main(args);}}
这样就可以将所有 jar 放在 class 路径上,这样就可以完全忽略模块系统,而不必手动删除 module-info.classes .
我刚刚将我的 eclipse 项目从 java 8 更新到 java 11。但是我在这个项目中使用了专为 java 8 设计的外部库。我已经成功像以前一样将这些库导入到项目类路径中,但 Eclipse 只是拒绝使用它们。当我尝试导入它们时,它会将其突出显示为错误消息 “类型 bla.bla.Foo 不可访问”。我还尝试将这些库导入项目 modulepath 并在 module-info.java 中需要它们,这以某种方式解决了问题,但我仍然不断收到警告 "自动模块名称 'SomeLib' 是不稳定,它是从模块的文件名派生的。" 和 "由于缺少 'requires transitive'",客户端可能无法访问模块 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 个理由,为什么从现有库中删除 module-info.class
是个坏主意,但是...如果可行,但我仍然认为没有其他解决方案使我的非模块化项目与 JavaFx 11 一起工作。
您为解决问题所做的工作可以通过更简单的方式实现。只需将如下一行添加到包含您的主要 class(假设名称 MyApp)的文件中,然后通过调用 MyAppLauncher.main 而不是 MyApp.main.
来启动您的应用程序class MyAppLauncher {public static void main(String[] args) {MyApp.main(args);}}
这样就可以将所有 jar 放在 class 路径上,这样就可以完全忽略模块系统,而不必手动删除 module-info.classes .