父工程必须是maven pom类型,子模块依赖父pom中pom声明;子模块需正确定义及,且父pom的列表须准确无误。

父工程必须是 Maven pom 类型,不能是 jar 或 war
IDEA 本身不强制模块类型,但 Maven 多模块结构依赖父 pom.xml 的 <packaging>pom</packaging> 声明。如果父工程误设为 jar,子模块会无法被识别为 module,mvn compile 也报错 Non-resolvable parent POM。
- 新建父工程时,在 “Maven archetype” 页面勾选
Create from archetype后,**手动清空 Archetype 字段**,避免生成带骨架的 jar 工程 - 已有父工程类型错误:打开
pom.xml,确认根<project></project>下有且仅有<packaging>pom</packaging>,删掉<artifactid></artifactid>以外的构建配置(如<build></build>中的plugins) - IDEA 右键父项目 →
Maven→Reimport才能触发模块刷新,仅刷新 project 不生效
子模块的 pom.xml 必须声明 <parent></parent> 且路径正确
子模块不是靠 IDEA 目录结构“自动关联”的,而是靠 Maven 的 <parent></parent> 解析。常见现象是子模块显示为普通文件夹、无 Maven 图标、依赖不下载——基本就是这里错了。
-
<parent></parent>的<relativepath></relativepath>默认为../pom.xml,如果子模块不在父工程同级目录(比如在modules/api),就得显式写成<relativepath>../../pom.xml</relativepath> -
<groupid></groupid>和<version></version>在子模块中可省略,但必须和父pom.xml中一致;若手动写了,版本不一致会导致Dependency convergence警告 - 不要在子模块里再写
<modules></modules>,那是父工程的职责;否则 IDEA 会重复加载,出现 “Duplicate module name” 提示
IDEA 中模块未识别?检查 .idea/modules.xml 和 iml 文件生成逻辑
即使 pom.xml 全对,IDEA 也可能没把子模块注册为 module——本质是它没生成对应的 .idea/modules/xxx.iml 文件,或 .idea/modules.xml 里没记录。
- 关闭项目,删掉整个
.idea目录和所有*.iml文件,再用 IDEA **Open**(不是 Import)父工程根目录,让它重新解析 Maven 结构 - 如果用了 Git,确保
.idea不在.gitignore里——虽然官方建议忽略,但团队协作时缺失modules.xml会导致模块丢失 - 右键子模块目录 →
Add as Maven project是临时补救,但治标不治本;若频繁需要,说明父pom.xml的<modules></modules>列表漏写了该子模块名
运行子模块时提示 Class not found?检查模块依赖范围和编译输出路径
多模块下,子模块 A 依赖子模块 B,但运行 A 时找不到 B 的类,往往不是依赖没加,而是 IDEA 编译输出路径冲突或 scope 错误。
- 在子模块 A 的
pom.xml中,B 的依赖<scope></scope>应为compile(默认),而非test或provided;后者会导致运行时不可见 - IDEA 默认把每个模块编译到
target/classes,但运行配置里若选了 “Use classpath of module”,需确认该 module 的 Dependencies 里已包含 B 模块(右键模块 →Open Module Settings→Dependencies查看) - 避免手动修改
Output path为绝对路径;统一用 IDEA 默认的$MODULE_DIR$/target/classes,否则 Maven 构建和 IDEA 运行行为不一致
pom.xml 里 <modules></modules> 标签顺序、拼写、路径斜杠方向(Windows 也必须用正斜杠)、是否多写了空格——这些看着琐碎的地方,恰恰是 IDEA 加载失败最常卡住的位置。










