Eclipse无法运行带有模块警告的Java项目

问题描述

我正在使用OpenJDK-14运行Eclipse 4.16。我有一个简单的Java项目,其中有一个带swt.jar的lib文件夹。它已添加到项目的“属性”>“ Java构建路径”>“库”对话框中的modulepath中。当我在类中导入并使用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导入的类中的条目。这次虽然进入了Require 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

解决方法

我知道了!我的运行配置的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/craig/workspace/ca.footeware.converter.temperature。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...