Maven聚合模块/父子工程详解

1、maven聚合模块

聚合模块为项目目录的最顶层,其他模块作为聚合模块子目录而存在。目的是为一次构建多个项目模块。

项目结构如下:
在这里插入图片描述
通常聚合的模块可以理解为为父工程,下面的模块为子模块。
聚合模块(父工程)作用1:父工程是一个pom工程,通常只是用来帮助其子模块构建的工具,本身并没有实质的内容。具体每个工程代码的编写还是在生成的工程中去写。所有的子模块都继承于父模块,父模块用来做整个项目的版本控制,也就是项目中所有要使用到的jar包的版本都集中由父工程管理。这样你在写其他工程pom文件中maven依赖时就不需要写版本号了。
通常一个大的项目会将项目分成多个模块,比如上图,各个子模块之间不会有依赖关系,但是他们之间却有很多共性的东西,比如说很多类似的配置、很多类似的 jar包等等,这时候父项目和子项目的优势就能体现出来了。我们知道maven父项目和子项目的pom.xml是有继承关系的,也就是说各个模块相同的部 分,我们可以配置到父项目的pom.xml文件中,这样子项目中的pom.xml只放自己个性的东西就可以了,这大大减少了工作量。另外,在编译和打包等 其他阶段,都可以统一在父项目中来进行,maven会自动操作其中的子项目,提高了效率。如下图所示:
在这里插入图片描述
在父模块的pom文件中引入两个子模块:、

<modules>
<module>Model1</module>
<module>Model2</module>
</modules>

此时Model1和Model2为ParentProject的子模块,此时Model1和Model2会继承ParentProject中pom.xml文件的配置。

2、pom继承

pom继承是为了抽出重复配置,通常配置在父模块中,为子模块提供使用,这样可以做到“一处声明,处处使用”。
在这里插入图片描述
此时Model1、Model2、Model3的pom文件继承与Parent。
常用的pom被继承的元素:

groupId :项目组 ID ,项目坐标的核心元素;    
version :项目版本,项目坐标的核心元素;    
description :项目的描述信息;    
properties :自定义的 Maven 属性;    
dependencies :项目的依赖配置;    
dependencyManagement :醒目的依赖管理配置;    
repositories :项目的仓库配置;    
build :包括项目的源码目录配置、输出目录配置、插件配置、插件管理配置等;  

具体pom.xml文件配置参考下文:
https://blog.csdn.net/u012152619/article/details/51485297

如下:

父工程pom:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  
  <modelVersion>4.0.0</modelVersion>  
  
  <groupId>com.sohu.train</groupId>  
  <artifactId>maven-aggregate</artifactId>  
  <version>0.0.1-SNAPSHOT</version>  
  <packaging>pom</packaging>  
  
  <!-- 子模块 -->  
  <modules>  
    <module>../maven-01</module>  
    <module>../maven-02</module>  
    <module>../maven-03</module>  
  </modules>   
  <!-- 统一配置构件的版本号 -->  
  <properties>  
    <junit.version>3.8.1</junit.version>  
  </properties>  
    
  <!-- 依赖管理 -->  
  <dependencyManagement>  
    <dependencies>  
        <dependency>  
            <groupId>junit</groupId>  
            <artifactId>junit</artifactId>  
            <version>${junit.version}</version>  
            <scope>test</scope>  
        </dependency>  
    </dependencies>     
  </dependencyManagement>  
</project>  

子工程pom文件:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  
    <modelVersion>4.0.0</modelVersion>  
    <!-- 指定父pom的坐标及pom位置 -->  
    <parent>  
        <groupId>com.sohu.train</groupId>  
        <artifactId>maven-aggregate</artifactId>  
        <version>0.0.1-SNAPSHOT</version>  
        <relativePath>../maven-aggregate/pom.xml</relativePath>  
    </parent>  
    <artifactId>maven-03</artifactId>  
    <packaging>jar</packaging>  

        <!-- 添加对junit依赖,这样公用配置只需要在maven-aggregate中去配置 -->  
       因为在父工程中添加同一依赖,这一部分可以不要。 
				    <dependencies>  
				        <dependency>  
				            <groupId>junit</groupId>  
				            <artifactId>junit</artifactId>  
				        </dependency>  
				    </dependencies>  
</project>  
发布了44 篇原创文章 · 获赞 27 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_42784951/article/details/99549949
今日推荐