模块名必须为全小写、点分隔、反向域名前缀,如com.example.mall.order;需与maven artifactid严格对齐;应体现业务边界,禁用泛化词和jdk/第三方模块名。

Java 模块化开发中,模块名称(module-info.java 中的 module xxx.yyy.zzz)不是随意起的别名,而是 Java 9+ 模块系统的核心标识符,承担着唯一性、可读性、可解析性和依赖管理的关键作用。规范制定模块名,本质是为 JVM 和构建工具提供稳定、无歧义的“模块身份证”。
模块名必须全小写 + 点分隔 + 反向域名前缀
这是强制性基础规则,直接决定模块能否被正确识别和加载:
- 全部使用小写字母,禁止大写、下划线、短横线或数字开头(如
user-service、UserModule、1order均非法) - 必须采用点(
.)作为层级分隔符,结构为:顶级域.组织名.项目名.模块功能 - 前缀必须基于真实、可归属的反向域名(如公司官网
example.com→com.example),确保全局唯一性 - 示例正确写法:
module com.example.mall.order;、module com.example.mall.user.api;
模块名需与 Maven 工件 ID 严格对齐
模块名不是孤立存在的,它必须与构建坐标保持一致,否则在多模块工程中会引发类路径冲突或 JPMS 解析失败:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- Maven 的
<artifactid></artifactid>应与模块名最后一段完全相同(如<artifactid>mall-order</artifactid>→ 模块名应为com.example.mall.order) - 避免用连字符(
-)命名 artifactId 后再强行映射模块名(如 artifactIdmall-order对应模块名com.example.mallorder是错误妥协) - 推荐做法:统一用小写字母+点分隔定义模块名,Maven artifactId 也同步采用纯字母形式(
mallorder而非mall-order),或接受模块名与 artifactId 不完全字面一致但语义一致(如 artifactIduser-center→ 模块名com.example.mall.usercenter)
模块名要体现清晰的业务边界与职责
模块名不是技术容器标签,而是业务语义的浓缩表达,直接影响依赖设计和演进路径:
- 避免泛化词:不使用
common、util、base等模糊后缀单独作模块名(com.example.base不明确;应为com.example.mall.shared或com.example.mall.infra) - 按领域职责命名:如
com.example.mall.payment(支付)、com.example.mall.inventory(库存)、com.example.mall.notification(通知) - 区分能力层级:API 协议层用
.api,实现层用.internal或省略(如com.example.mall.order.api与com.example.mall.order.service)
模块名禁止与 JDK/第三方模块名冲突
JPMS 要求模块名全局唯一,重复将导致运行时报错 java.lang.module.FindException: Module xxx not found 或加载异常:
- 禁用 JDK 内置模块名:如
java.base、java.sql、jdk.httpserver等不可复用 - 避免常见开源模块名:如
com.google.common、org.springframework.core、io.netty.buffer等已由对应库声明 - 建议在定义前简单搜索 Maven Central 或查看目标依赖的
module-info.java,确认无重名
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










