首页 > 解决方案 > Eclipse 无法运行带有模块警告的 java 项目

问题描述

我正在使用 OpenJDK-14 运行 eclipse 4.16。我有一个简单的 java 项目,其中有一个带有 swt.jar 的 lib 文件夹。它被添加到项目的“属性”>“Java 构建路径”>“库”对话框中的模块路径中。当我在我的类中导入和使用一个 swt 类时,系统会提示我在我的模块信息文件中添加一个条目。它添加了带有警告的“swt”:

Name of automatic module 'swt' is unstable, it is derived from the module's file name.

当我尝试将项目作为 java 应用程序运行时,我在控制台中收到此错误并且没有运行:

Error occurred during initialization of boot layer
java.lang.module.FindException: Module swt not found, required by ca.footeware.swt.converter

如果我将项目导出为包含依赖项的可运行 jar,它会出现类似的警告。导出的 jar 确实可以运行(但这不是一个方便的开发周期 :)

我在某处读到,对于非模块化 jar,可以使用 MANIFEST.MF 标头 Automatic-Module-Name。我破解了 swt.jar 并添加了值为 org.eclipse.swt 的标头,即 jar 的根包。我删除了 Requires swt; 从我的 module-info.java 中,再次被提示从我的类中添加一个带有 swt 导入的条目。这次虽然进入 Requires org.eclipse.swt; 并且没有产生警告。当我尝试运行该项目时,我得到了同样的错误:

Error occurred during initialization of boot layer
java.lang.module.FindException: Module org.eclipse.swt not found, required by ca.footeware.swt.converter

标签: javaeclipsemoduleswt

解决方案


我让它工作了!我的运行配置的 VM 参数现在是:

--module-path ca.footeware.converter:ca.footeware.converter.temperature:/home/craig/Downloads/swt.jar -m ca.footeware.converter/ca.footeware.converter.Converter

我在 linux 上,--module-path 分隔符应该是 :,而不是 ;。

注意我已经将运行配置的工作目录设置为 ${workspace_loc} 而不是默认的 ${workspace_loc:ca.footeware.converter} 以便我可以通过简单名称而不是完全限定名称来访问两个模块项目,例如 /home/克雷格/工作区/ca.footeware.converter.temperature。


推荐阅读