使用Jlink创建运行时镜像时加载模块失败求助
Jlink无法加载自定义模块的排查方向
以下是你遇到的jlink加载模块失败的常见原因及检查点:
模块路径下的目录结构错误
jlink要求模块路径中的每个模块必须是模块化jar包,或者是包含module-info.class的目录(目录名需与模块名一致)。检查mymodapp\appmodules下的结构:- 应该存在
appfuncs和appstart两个子目录,每个子目录下对应模块的编译文件(包括module-info.class和包结构下的class文件) - 示例正确结构:
mymodapp\appmodules ├─ appfuncs │ ├─ module-info.class │ └─ appfuncs │ └─ [对应类的class文件] └─ appstart ├─ module-info.class └─ appstart └─ mymodappdemo └─ MyModAppDemo.class
- 应该存在
模块编译不完整或依赖声明错误
- 确认
appstart模块的module-info.java中已添加requires appfuncs;声明,且该文件已编译为module-info.class - 编译模块时需指定模块路径,比如编译
appstart的命令应类似:javac -d mymodapp\appmodules\appstart --module-path mymodapp\appmodules appstart\src\module-info.java appstart\src\appstart\mymodappdemo\MyModAppDemo.java - 确保两个模块的所有类都已正确编译,没有编译错误
- 确认
模块路径的分隔符或引号问题
Windows环境下模块路径用分号;分隔,但如果mymodapp\appmodules路径包含空格,需给整个路径加双引号,修改后的命令部分应为:--module-path "%JAVA_HOME%"\jmods;"mymodapp\appmodules"启动器参数的主类名错误
检查主类的全限定名是否准确:appstart/appstart.mymodappdemo.MyModAppDemo中,模块名appstart和全限定类名appstart.mymodappdemo.MyModAppDemo必须与实际编译后的模块和类完全匹配(注意大小写,Java对类名和模块名大小写敏感)
内容的提问来源于stack exchange,提问作者Kay.Z
相关产品推荐
相关产品推荐

