Maven项目中的继承和聚合

Maven中项目的继承和聚合目的都是用来方便工程模块的管理的,而Maven管理项目是方式是通过pom文件来实现的,所以Maven的继承和聚合关系本质又是不同模块间pom文件的关系。

  • Maven聚合:就是聚合工程pom中添加需要管理的子工程pom
  • Maven继承:就是子工程pom中添加父工程pom来获取其中的配置
  • 聚合和继承的功能:聚合是用来管理子模块工程的,继承是管理子工程中的依赖的。
聚合和继承关系:

一个聚合工程可以管理多个子模块工程,而一个子模块工程在被聚合工程管理的同时还能继承自己的父工程。

子模块工程可以不知道聚合父类,但一定知道继承的父类,因为聚合项目的配置都在聚合工程pom中,而继承的配置是在子模块工程中配置父工程pom的位置。

mvn 继承 distributionManagement maven继承与聚合_父类


聚合工程和父工程是两个不相干的工程,但是开发中为了项目方便管理,聚合工程和父工程往往都是一个工程:

mvn 继承 distributionManagement maven继承与聚合_父类_02

Maven聚合功能和实现
1、聚合工程由来

没有使用聚合工程之前:web模块依赖service模块,每次service模块修改都需要安装到本地仓库,web模块在本地仓库中下载才可以使用service修改后的功能。

mvn 继承 distributionManagement maven继承与聚合_同步操作_03

2、聚合的功能

聚合工程中各个相互依赖的模块工程之间的功能的修改需要在发布到本地仓库,其它模块工程就可以直接使用。

对聚合工程的所有mvn操作命令,都会同步操作到其它所有子工程。

mvn 继承 distributionManagement maven继承与聚合_jar包_04

3、聚合的实现

在聚合工程的pom中添加子工程pom的路径(多用相对路径)

<modules>
    <module>starter</module>
    <module>web</module>
    <module>service</module>
</modules>
4、聚合工程特点
  • 聚合工程中不用关心module顺序,maven会根据依赖自动按续打包
  • 对聚合工程的操作,会同步操作到其下的所有的子模块
Maven继承功能和实现
1、继承由来

多个子模块工程中都是用到了app.jar包,但是由于不同的子模块工程是由不同的开发者开发,所以会造成整个工程中同一各jar包存在多个版本。

2、继承的功能

在父pom中声明所有的依赖和依赖的版本,子模块工程中只需要声明依赖的jar包就可以,不用关系jar包的版本,这时候的jar包版本实际是取自父工程中的配置。

继承父中,父pom中的依赖也会被所有的字工程继承过去。

mvn 继承 distributionManagement maven继承与聚合_jar包_05

3、继承实现

继承实现是通过在子模块中指定父模块工程名称和位置来实现

<parent>
    <groupId>org.example</groupId>
    <artifactId>Profiles-Parent</artifactId>
    <version>1.0-SNAPSHOT</version>
    <!-- 默认可以不写,如果报错则需要手动指定 -->
    <relativePath>../</relativePath>
  </parent>