为何无法在IntelliJ IDE中用反向DNS创建Java/Gradle模块
IntelliJ IDEA 命名规则与模块概念说明
各类资源命名规范与反向DNS命名拦截说明
不同层级资源的命名规则完全不同,不要混用规则:
- 项目(Project):作为工程的最顶层容器,命名仅需规避操作系统不允许的文件名字符(
/\:*?"<>|)即可,推荐使用语义清晰的短名称,可搭配中划线、数字组合,例如e-commerce-system。 - 包(Package):遵循Java语言规范,必须使用全小写、点分隔的反向DNS格式,例如
com.mycompany.ecs.user,合规的反向DNS包名不会被IntelliJ拦截。 - 模块(Module):属于IDE/Maven/Gradle层面的工程分组单元,原生IntelliJ模块默认不支持点分隔的反向DNS格式作为模块名——这也是大部分人触发拦截的核心原因:误将包名的命名规则用到了模块名上。此前Maven ArtifactId确实存在点分隔命名被错误拦截的bug,官方本月已发布对应补丁修复,将IDE更新到最新补丁版本即可解决该场景下的拦截问题。
模块名推荐使用中划线分隔的语义化短名称,例如user-service、common-tools,模块内部的源码包再按反向DNS规则创建即可,不会触发任何校验拦截。
Java Module 与 IntelliJ Module 的核心差异
二者属于完全不同层面的概念,不存在对等关系:
- Java Module:是Java 9正式引入的JPMS(Java平台模块化系统)的语言级概念,核心是通过源码根目录下的
module-info.java文件定义模块的依赖边界、对外导出的包范围、服务加载规则等,实现强封装的依赖管控,该特性和使用什么IDE无关,只要运行环境为JDK9及以上即可生效。 - IntelliJ Module:是IntelliJ IDEA自定义的工程组织单元,本质是对一组源码、资源、依赖、编译配置的逻辑分组,目的是在同一个项目窗口下管理多个可独立编译、部署的代码块。该概念仅在IntelliJ体系内生效,配置存储在项目目录下的
.iml文件及.idea配置目录中,和Java版本、Java模块化规范没有绑定关系——哪怕你用JDK8、完全不碰JPMS,拆分工程单元时依然要创建IntelliJ Module。
常见关联场景:如果使用JDK9及以上版本开发,可以给单个IntelliJ Module添加
module-info.java文件,让这个IntelliJ Module承载一个Java Module的配置,二者是容器和内容的承载关系,不是同一概念。
内容的提问来源于stack exchange,提问作者KeepAtIt
相关产品推荐
相关产品推荐

