maven子pom没有继承到父pom依赖版本
Java项目很多都会有子module,一般父项目没有逻辑代码,在父项目pom.xml中注明依赖、version和其他一些公用的东西,子module的pom继承父pom,子pom就不用写依赖的版本了,但至少也要写用到依赖的groupId、artifactId,这样默认会使用父项目依赖的版本。子pom也可以写版本,这样就不受父pom影响了,和继承类似,但还是有些区别。
使用时需要注意,我就是忘了其中一项,没有生效:
-
父pom需要添加
<packaging>pom</packaging>
-
父pom需要用
<modules><module>子module名</module></modules>
注明子module有哪些 -
父pom声明依赖时
<dependencies>
外要嵌套<dependencyManagement>
才能被子pom继承到,我就是忘了这点 -
子pom需要通过
<parent></parent>
指定父项目,声明依赖时就默认会用父pom中的版本了
dependencyManagement:像上面提到的,一般在父项目中会声明这个元素,和普通依赖用法类似,这个元素并不会真的引入依赖,只会标明依赖和版本,子项目会从父项目找
<dependencyManagement>
从而确定需要引用依赖版本,类似于模板模式。
父pom例子:
<!-- 省略无关配置 -->
<packaging>pom</packaging>
<modules>
<!-- 注明所有子module -->
<module>module1</module>
<module>module2</module>
</modules>
<dependencyManagement>
<dependencies>
<!-- 以Lombk为例 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.8</version>
</dependency>
</dependencies>
</dependencyManagement>
- 子pom module1例子:
<!-- 省略无关配置 -->
<parent>
<groupId>父项目group</groupId>
<artifactId>父项目artifactId</artifactId>
<version>父项目version</version>
<relativePath>../pom.xml</relativePath>
</parent>
<dependencies>
<!--这样会使用父pom中的依赖版本1.18.8,如果这里写version就不会使用父pom里的版本了-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>