调试 Java Module(即 Java 9 引入的 JPMS:Java Platform Module System)时,方法和普通 Java 项目类似,但模块化的特殊性会带来一些额外关注点。下面按常见场景系统说明。
前提
module-info.java步骤
Debug 'Main'--module-path--add-modules如果调试失败,检查:
Run/Debug Configuration
Build and run 是否使用 module pathVM options 是否包含错误的模块参数javac -d out --module-source-path src $(find src -name "*.java")
java --module-path out --module com.example.app/com.example.app.Main
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005 \
--module-path out \
--module com.example.app/com.example.app.Main
然后在 IDE 中:
Remote JVM Debuglocalhost:5005✅ 这是理解模块路径机制的最好方式
Module not found / Package not visible原因
requires 模块调试方法
java --module-path out --list-modules
或在代码中断点:
ModuleLayer.boot().modules().forEach(System.out::println);
错误示例
InaccessibleObjectException
解决方式
module-info.java 中:opens com.example.package to spring.core, jackson.databind;
或调试时临时使用:
--add-opens java.base/java.lang=ALL-UNNAMED
⚠️ 不建议生产使用,但调试非常有用
在调试时确认:
System.out.println(
this.getClass().getModule()
);
输出:
named module ✅unnamed module ⚠️(说明没真正用 module)jar --describe-module --file xxx.jar
jdeps --module-path out -s --module com.example.app
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<argLine>
--add-opens java.base/java.lang=ALL-UNNAMED
</argLine>
</configuration>
</plugin>
IDEA 中:
✅ 核心思路
把模块当成“运行时的强约束环境”,调试时重点看:
✅ 推荐调试顺序
jdeps、--list-modules 分析--add-opens 定位问题你可以直接贴:
module-info.java免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。