Eclipse中jOpenDocument报错:无法派生模块描述符
解决jOpenDocument模块描述符报错问题
问题根源
你遇到的错误核心是:
- jOpenDocument的jar包中存在无名包(无package声明)的类(比如
JDOMAbout$Info.class),而Java模块系统(JPMS)要求模块内不能包含无名包的类,因此无法自动推导模块描述符。 - 自动模块名称不稳定的提示,是因为该jar没有官方的
module-info.java,模块名由文件名推导而来(你的情况是jopendocument),而你在module-info.java中写的是requires jOpenDocument,大小写不匹配也会加重问题。
解决方案(按推荐优先级排序)
方案1:切换为非模块化项目(最简便)
直接避开模块系统的限制:
- 右键项目 → 属性 → Java Build Path → Libraries
- 将
jOpenDocument.jar从Modulepath移到Classpath - 删除项目根目录下的
module-info.java文件 - 重新运行程序即可
方案2:修正自动模块名并添加VM参数(保留模块化项目)
如果要继续使用模块化项目,先解决模块名匹配问题,再绕过无名包限制:
- 修改
module-info.java中的requires语句,和自动模块名一致:requires jopendocument; - 打开运行配置 → VM arguments,添加参数放宽模块化限制:
(注:该参数在Java 9+中临时允许非合规模块的访问,仅作为过渡方案)--illegal-access=warn
方案3:手动为jar添加模块描述符(彻底解决,适合长期使用)
如果需要合规的模块化依赖,手动修改jar包:
- 解压
jopendocument.jar到临时目录 - 将顶级目录下的无名包类(如
JDOMAbout$Info.class)移动到一个新包中(比如org.jopendocument.legacy),并修改这些类的package声明 - 在解压目录下创建
module-info.java,示例内容:module jopendocument { exports org.jopendocument.dom; exports org.jopendocument.util; // 根据你用到的包添加exports声明 requires java.desktop; requires java.xml; } - 重新打包jar:
jar --create --file jopendocument-mod.jar -C 解压目录路径/ . - 用新的
jopendocument-mod.jar替换原jar,在module-info.java中声明requires jopendocument;即可
内容的提问来源于stack exchange,提问作者Holger
相关产品推荐
相关产品推荐

