多模块依赖继承的问题
一、问题排查
建立多模块的项目,或者根据父类依赖来建立模块工程后,执行 mvn clean package 命令会出现 progress terminated 报错,详细信息报错缺少 version
在子模块 child 的 pom.xml 中添加 version
限定,设定版本问题得以解决
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.3.1.RELEASE</version>
</dependency>
父依赖模块中的依赖信息
<dependencyManagement>
<dependencies>
<!-- ......... -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
</dependencyManagement>
二、问题原因及解决办法
原因:子模块没有指定依赖的版本号
解决方法:
-
采用上述方法进行解决,多模块的依赖中,各个模块再次设定自己依赖的版本,显然不方便管理
-
去除父模块中
dependencyManagement
属性,直接使用dependcies
属性指定依赖包版本号,但是父模块打包时,会依赖自己的子模块,形成循环依赖,再次报错<dependencies> <!-- 子模块--- --> <dependency> <groupId>com.demo</groupId> <artifactId>child</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> <!-- 其他依赖--> </dependencies>
-
在
dependencyManagement
外再次指定需要依赖的模块,可以解决,但是子模块会优先查找dependencyManagement
中的包,难以管理<dependencyManagement> <dependencies> <!-- 子模块--- --> <dependency> <groupId>com.demo</groupId> <artifactId>child</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> <!-- 其他依赖--> </dependencies> </dependencyManagement> <dependencies> <!-- 其他依赖--> </dependencies>
-
根本解决方法:在
dependencyManagement
中进行依赖管理,申明版本,子模块按需引入<dependencyManagement> <dependencies> <!-- 子模块--- --> <dependency> <groupId>com.demo</groupId> <artifactId>child</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> <!-- 其他依赖--> </dependencies> </dependencyManagement>
三、鸣谢
参考链接:
链接一:Maven实战— dependencies与dependencyManagement的区别
链接二:Maven的父子依赖包继承问题