提出问题
在电商项目中,目前有3个maven工程:
- 用户系统,依赖log4j 版本1.0
- 商铺系统,依赖log4j 版本1.2
- 评价系统,依赖log4j 版本1.1
也就是说:属于一个大项目的多个子项目中,有共同的依赖,但是版本不同,不易于统一管理
解决问题
通过 继承 消除重复的依赖
- 创建一个maven父工程,打包方式是:
pom - 在maven子工程引用父工程。
<parent> - 将子工程的共同依赖 移到 父工程中,放到
<dependencyManagement>标签中 - 子工程只声明父工程的依赖(只需要groupId、artifactId),不指定版本
- 子工程需要其他版本时,指定版本即可
就可以统一受父工程的依赖管理
<dependencyManagement> 作用
使用 <dependencyManagement> 可以 统一管理项目的版本号,确保应用的各个项目的依赖和版本一致,不用每个模块项目都弄一个版本号,不利于管理,当需要变更版本号的时候只需要在父类容器里更新,不需要任何一个子项目的修改
如果某个子工程需要另外一个版本号时,只需要在自己的模块dependencies中声明该版本号即可。子工程就会使用该版本号的依赖,不继承父工程的版本号。
与dependencies区别:
父工程定义在
<dependencies>中的依赖,父工程会引入,子工程也会自动引入。父工程定义在
<dependencyManagement>中的依赖,只是声明依赖,并不引入。
当子工程需要引入父工程的某个依赖时,必须引入(只需要groupId、artifactId)。
注意:如果子工程指定了版本号,那么会使用该版本。
例子 创建父工程
pom.xml关键部分如下:
修改打包方式
父工程要将打包方式改成pom:
<groupId>org.alibaba</groupId>
<artifactId>taobao</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 打包方式修改成pom -->
<packaging>pom</packaging>
定义:dependency
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
定义:dependencyManagement,指定log4j
<dependencyManagement>
<dependencies>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
</dependency>
</dependencies>
</dependencyManagement>
注意: 定义:dependencyManagement后,父工程并没有导入log4j.jar
例子:创建子工程
pom.xml
关键部分如下:
<!-- 继承父工程 -->
<parent>
<groupId>org.example</groupId>
<artifactId>parent</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 以当前文件为基准,父工程的相对路径,也可以没有 -->
<relativePath>../parent</relativePath>
</parent>
按下图操作:
子工程会自动导入父工程声明在<dependencies>中的junit.jar
但不会导入父工程声明在<dependencyManagement >中的log4j
配置 <dependencies>
在pom.xml中粘贴下面配置:
注意:这里不指定<version>
<dependencies>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</dependency>
</dependencies>
然后点击上图中的Reimpot,子工程会导入log4j.jar,如下图:
指定<version>
当子工程需要使用log4j其他版本时,指定<version>即可:
<dependencies>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.11</version>
</dependency>
</dependencies>
然后点击上图中的Reimpot,子工程会导入log4j-1.2.11.jar
感谢:
https://blog.csdn.net/vtopqx/article/details/79034835

