非模块化项目无法引入命名模块,因其不启用JPMS,所有JAR均被视为未命名模块并按传统类路径加载;只需常规添加Maven/Gradle依赖即可,无需处理module-info或模块声明。

非模块化项目(即没有 module-info.java)本身不参与 JPMS 模块解析,因此**不能直接“引入”第三方命名模块**——它压根不会去读取或验证模块声明。但你可以照常使用那些已模块化的 JAR(如 jackson-databind-2.15.2.jar),只要它们被正确放在类路径(-cp)上,JVM 就会按传统方式加载类,完全忽略其内部的 module-info.class。
为什么“引入命名模块”在非模块化项目里不成立
命名模块(Named Module)是 JPMS 的概念,只有当项目自身是模块(含 module-info.java)且运行在模块路径(--module-path)下时,模块系统才会激活。非模块化项目启动时默认走类路径机制,所有 JAR —— 无论是否自带 module-info.class —— 都被视为“未命名模块”(Unnamed Module),其内容全部可访问、无封装限制。
你实际要做的只是常规依赖引入
无需特殊操作,按老办法处理即可:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- 用 Maven:在
pom.xml中添加依赖,例如:<dependency><br> <groupId>com.fasterxml.jackson.core</groupId><br> <artifactId>jackson-databind</artifactId><br> <version>2.15.2</version><br></dependency>
- 用 Gradle:在
build.gradle中写:implementation 'com.fasterxml.jackson.core:jackson-databind:2.15.2' - 手动引入:把 JAR 拖进 IDE 的 Libraries,或用
-cp指定路径启动
需要注意的两个例外情况
虽然模块声明被忽略,但个别已模块化 JAR 可能带来隐性影响:
立即学习“Java免费学习笔记(深入)”;
-
资源加载路径变化:某些库(如 Log4j 2.19+)在模块化后将配置文件默认放在
META-INF/services/或模块专属路径,若你用Class.getResource()加载失败,需检查该库文档是否调整了资源约定 -
反射受限增强:JDK 9+ 对跨模块反射加了默认限制(即使在未命名模块中),若代码用
setAccessible(true)访问第三方库的私有成员,可能触发InaccessibleObjectException;此时需启动参数临时放宽:--add-opens java.base/java.lang=ALL-UNNAMED
什么时候才需要关心“命名模块”
只有当你决定将项目升级为模块化(新增 module-info.java)时,才需处理命名模块的 requires 声明、opens 授权等。在此之前,把它当成普通 JAR 用就行,不用为模块名、自动模块、推断规则操心。

















