在 Java 里说的 “Module 模块” 通常指的是 Java 9+ 的 JPMS(Java Platform Module System,模块系统,module-info.java)。下面按常见调试场景系统地说一下怎么调试。
Error: Module xxx not found
✅ 调试方法:
module-info.java 中是否 requiresrequires com.example.lib;
module-info.java 或 Automatic-Module-Name)java --list-modules
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
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;
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
module-info.java 在 src 根目录--module-path out/production/lib --module com.example.app/com.example.app.Main
module-info.javaRun as → Java Application (Modular)
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<release>17</release>
</configuration>
</plugin>
调试:
mvn -X compile
java {
modularity.inferModulePath = true
}
⚠️ 如果你在 classpath(不是 module-path)运行:
✅ 判断是否 unnamed:
getClass().getModule().getName(); // null = unnamed
--module-path 而不是 -cpmodule-info.java 是否 requires + exportsopens你可以告诉我:
我可以直接帮你定位问题并给出最小可运行示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。