Java使用--add-reads无法识别模块m1,但--list-modules可检测到该模块
解决--add-reads无法识别已存在模块的问题
这个问题其实是JVM模块系统的一个常见行为:当你运行某个模块时,JVM只会自动加载该模块显式依赖的模块——哪怕其他模块在模块路径里(就像你的m1用--list-modules能看到),只要没被依赖,就不会被加载到JVM的模块池中,这时候--add-reads自然找不到它。
快速解决方案
只需要在命令中添加--add-modules m1,强制JVM预先加载m1模块,这样--add-reads就能正确识别并建立m2到m1的读取关系了。修正后的完整命令:
java -p M2/bin:M1/bin --add-modules m1 --add-reads m2=m1 -m m2/p2.C2
额外说明
如果你需要长期让m2读取m1,更规范的做法是修改m2的module-info.java,直接声明依赖:
module m2 { requires m1; }
这样编译后,运行时就不需要额外的命令行参数了。但如果只是临时测试或调试,用--add-modules + --add-reads的组合就非常方便。
内容的提问来源于stack exchange,提问作者Ivan
相关产品推荐
相关产品推荐

