必须用dependencymanagement统一多模块maven项目依赖版本,父模块在<dependencymanagement>中声明groupid、artifactid和version,子模块继承父模块且dependencies中省略version,再通过effective-pom和dependency:tree验证版本是否生效。

在多模块Maven项目中,子模块各自声明相同依赖却写了不同版本号,导致构建时出现ClassNotFoundException或运行时方法找不到——这说明依赖版本没统一,必须用
父模块中定义 dependencyManagement 块
打开父模块的 pom.xml,在 <project></project> 根标签内、<dependencies></dependencies> 外层添加 <dependencymanagement></dependencymanagement> 块。
把所有需要统一版本的依赖,连同 <groupid></groupid>、<artifactid></artifactid>、<version></version> 一起写进 <dependencymanagement><dependencies></dependencies></dependencymanagement> 里。
【必须放在 pom,不该含实际代码或 jar 包。
如果使用 Spring Boot,推荐用 <scope>import</scope> 导入官方 BOM:
→ <type>pom</type> 和 <scope>import</scope> 必须成对出现,且只能出现在 <dependencymanagement></dependencymanagement> 中。
子模块继承父模块并省略 version
确保子模块的 pom.xml 中有正确的 <parent></parent> 声明,指向你刚配置好的父模块。
在子模块自己的 <dependencies></dependencies> 块中,添加所需依赖时,只写 <groupid></groupid> 和 <artifactid></artifactid>,绝对不要写
例如父模块已声明 org.springframework.boot:spring-boot-starter-web:3.3.5,子模块只需:<dependency><groupid>org.springframework.boot</groupid><artifactid>spring-boot-starter-web</artifactid></dependency>
这一步操作起来很简单,但一旦漏删 <version></version>,Maven 就会优先采用子模块写的版本,<dependencymanagement></dependencymanagement> 彻底失效。
验证版本是否真正生效
第一步:在项目根目录执行 mvn help:effective-pom,输出最终合并后的 POM 内容。
第二步:用 Ctrl+F 搜索目标依赖的 groupId 和 artifactId,确认其 version 值来自父模块的 <dependencymanagement></dependencymanagement>,而非子模块自身声明。
第三步:运行 mvn dependency:tree -Dverbose,观察该依赖实际解析出的版本号是否与父模块定义一致。若显示多个版本并存,说明某处子模块偷偷写了 <version></version> 或引入了冲突传递依赖。
注意:如果子模块依赖项未出现在 effective-pom 的 <dependencies></dependencies> 区域,说明它根本没被引入——<dependencymanagement></dependencymanagement> 只管版本,不管引入,<dependencies></dependencies> 才决定是否拉包。











