温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Java Module 如何调试

发布时间:2026-08-31 17:21:47 来源:亿速云 阅读:89 作者:小樊 栏目:编程语言

调试 Java Module(即 Java 9 引入的 JPMS:Java Platform Module System)时,方法和普通 Java 项目类似,但模块化的特殊性会带来一些额外关注点。下面按常见场景系统说明。


一、调试 Java Module 的通用方式

1️⃣ 使用 IDE 调试(最常用)

✅ IntelliJ IDEA

前提

  • 项目使用 module-info.java
  • SDK ≥ 9

步骤

  1. 在代码中打断点
  2. 右键主类或测试类
    Debug 'Main'
  3. IDEA 会自动:
    • 识别 module path
    • 设置 --module-path
    • 使用 --add-modules

如果调试失败,检查:

  • Run/Debug Configuration
    • Build and run 是否使用 module path
    • VM options 是否包含错误的模块参数

2️⃣ 命令行调试(理解模块机制很重要)

编译

javac -d out --module-source-path src $(find src -name "*.java")

运行

java --module-path out --module com.example.app/com.example.app.Main

调试(使用 JPDA)

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 Debug
  • 连接到 localhost:5005

这是理解模块路径机制的最好方式


二、常见调试难点 & 解决方案

✅ 1. Module not found / Package not visible

原因

  • requires 模块
  • 模块路径不对
  • 自动模块名错误

调试方法

java --module-path out --list-modules

或在代码中断点:

ModuleLayer.boot().modules().forEach(System.out::println);

✅ 2. 反射 / 第三方库问题(非常常见)

错误示例

InaccessibleObjectException

解决方式

  • module-info.java 中:
opens com.example.package to spring.core, jackson.databind;

或调试时临时使用:

--add-opens java.base/java.lang=ALL-UNNAMED

⚠️ 不建议生产使用,但调试非常有用


✅ 3. 调试 module path vs classpath

在调试时确认:

  • 当前类是在 module path 还是 classpath
System.out.println(
    this.getClass().getModule()
);

输出:

  • named module
  • unnamed module ⚠️(说明没真正用 module)

三、调试 module-info.java 本身

✅ 查看模块描述

jar --describe-module --file xxx.jar

✅ 检查依赖

jdeps --module-path out -s --module com.example.app

四、测试中的调试(JUnit + Module)

Maven + JUnit 5

<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 中:

  • 直接 Debug 测试类即可
  • 注意 测试代码可能在 classpath

五、调试技巧总结(重点)

核心思路

把模块当成“运行时的强约束环境”,调试时重点看:

  • 模块路径
  • 包可见性
  • 反射权限

推荐调试顺序

  1. 先用 IDE 调试
  2. 出问题 → 命令行复现
  3. jdeps--list-modules 分析
  4. 临时 --add-opens 定位问题

六、如果你愿意,我可以

  • ✅ 帮你分析 具体报错
  • ✅ 给你一个 最小可调试 Module 示例
  • ✅ 帮你对比 普通项目 vs Module 项目调试差异
  • ✅ 具体解决 Spring / MyBatis / JPA 在 Module 下的调试问题

你可以直接贴:

  • module-info.java
  • 报错信息
  • 构建工具(Maven / Gradle)
向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI