温馨提示×

温馨提示×

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

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

java Module模块怎么调试

发布时间:2026-10-08 22:51:45 来源:亿速云 阅读:90 作者:小樊 栏目:编程语言

在 Java 里说的 “Module 模块” 通常指的是 Java 9+ 的 JPMS(Java Platform Module System,模块系统,module-info.java)。下面按常见调试场景系统地说一下怎么调试。


一、最常见的模块调试问题

1️⃣ 模块找不到(Module not found)

Error: Module xxx not found

✅ 调试方法:

  • 确认 module-info.java 中是否 requires
requires com.example.lib;
  • 确认依赖模块 确实是一个模块(有 module-info.java 或 Automatic-Module-Name)
  • 用命令查看模块:
java --list-modules

2️⃣ 包不可见(Package not visible)

package com.example.internal is not visible

✅ 原因: 模块没有 exports

module com.example.app {
    requires com.example.lib;
}

而 com.example.lib 没有:

exports com.example.api;

✅ 调试方式:

javac --module-path lib -d out $(find src -name "*.java")
java --module-path lib -m com.example.app/com.example.app.Main

3️⃣ 反射失败(IllegalAccessError)

module com.example.app does not open com.example.app to unnamed module

✅ 原因: 框架(Spring、Jackson)用反射访问私有成员

✅ 解决:

open module com.example.app {
}

或

opens com.example.app to spring.core;

二、调试 Module 的常用命令

✅ 查看模块依赖

jdeps --module-path lib -m com.example.app

✅ 查看模块详细信息

java --describe-module com.example.app

✅ 打印模块解析过程

java -Xlog:modules=debug -m com.example.app/com.example.app.Main

三、IDE 中如何调试 Module(重点)

✅ IntelliJ IDEA

  1. Project Structure → Modules
  2. 确认:
    • 模块路径正确
    • module-info.java 在 src 根目录
  3. Run → Edit Configurations:
    • VM options:
    --module-path out/production/lib --module com.example.app/com.example.app.Main
    
  4. 断点调试 ✅(和平时一样)

✅ Eclipse

  • 自动识别 module-info.java
  • 出现模块错误会直接标红
  • 运行配置中选择:
    Run as → Java Application (Modular)
    

四、Maven / Gradle 中的模块调试

Maven

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <configuration>
    <release>17</release>
  </configuration>
</plugin>

调试:

mvn -X compile

Gradle

java {
    modularity.inferModulePath = true
}

五、调试“Unnamed Module”(最容易踩坑)

⚠️ 如果你在 classpath(不是 module-path)运行:

  • 所有类都在 unnamed module
  • 不能访问模块化 JDK 内部 API

✅ 判断是否 unnamed:

getClass().getModule().getName(); // null = unnamed

六、快速自查清单 ✅

  • [ ] 是否在用 --module-path 而不是 -cp
  • [ ] module-info.java 是否 requires + exports
  • [ ] 是否框架需要 opens
  • [ ] JDK 版本是否一致
  • [ ] IDE 是否识别为 Module 项目

七、如果你愿意,我可以更具体帮你

你可以告诉我:

  1. 用的是 JDK 几?
  2. 报错信息原文?
  3. 是 IDE / Maven / Gradle / 命令行?
  4. 是否用 Spring / JavaFX / 反射框架?

我可以直接帮你定位问题并给出最小可运行示例。

向AI问一下细节

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

AI
助
手