Maven的聚合工程与继承

目录

一、为什么需要使用Maven工程

二、聚合工程的结构

三、聚合工程实现步骤 

四、父工程统一管理版本

五、编译打包


        大家好,我是jstart千语。想着平时开发项目似乎都是用maven来管理的,并且大多都是聚合工程。而且在maven的聚合工程中,通常与maven继承一起使用。有时候可能会把这两者混淆,所以在这里做一些总结吧。


一、为什么需要使用Maven工程

1、统一依赖和版本

  • 不同模块可能都要用相同的第三方库(如 Spring、MyBatis 等),如果在各自 pom.xml 中单独声明,版本管理非常混乱。

  • 父 POM 通过 <dependencyManagement> 集中声明依赖版本,子模块直接引用即可,实现“统一升级一次、全项目生效”。

2、集中构建与发布

  • 多模块聚合后,只需在父工程执行一次 mvn clean install,即可编译、测试、打包所有子模块。

  • 集中发布时,Maven 会自动按照模块间的依赖顺序来部署,避免手动一个一个打包。

3、复用公共代码

  • 将通用工具、常量、DTO 等抽离到 common 或类似模块中,避免在每个服务里重复实现。

  • 不同服务只需依赖同一个公共模块,既减少重复,又便于统一更新维护。

4、支持灵活的环境配置

  • 父 POM 可以定义多套 Profile(如 devtestprod),根据激活的 Profile 加载不同的资源或插件配置。

  • 各子模块通过继承父配置,实现环境切换无需改各自代码。

二、聚合工程的结构

my-project/

├── pom.xml                     ← 聚合父 POM(packaging = pom)

├── common/                     ← 通用工具模块
│   └── pom.xml

├── service-a/                  ← 服务 A 模块
│   └── pom.xml

├── service-b/                  ← 服务 B 模块
│   └── pom.xml

└── web-app/                    ← Web 前端或 Spring Boot 模块
    └── pom.xml
 

说明:
聚合工程: 
顶层pom.xml所在的模块不包含业务的空工程(只有一个pom.xml文件)

作用:可以将多个编组通过聚合实现对所包含的模块进行同步构建。并且,某个模块发生变化时,其他模块若是与这个模块关联,就要同步更新,此时可以用聚合工程来批量解决。


三、聚合工程实现步骤 

(1)创建一个新的模块:父工程(管理工程),将其打包方式设置为 pom


(2)在父工程下新建模块


 (3)idea自动识别、并添加了相关信息

 


(4)至此,其实一个聚合工程就完成了。我们再多new几个模块试试



四、父工程统一管理版本

在父工程中的 dependencyManagement 标签里引入依赖,这样表示标签下面都是可选依赖,子模块可以按需要引入,并且不需要再指定版本。如:

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.18.32</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

并且,在父工程可以引入一些pom文件,用来统一指定框架使用的版本,减少版本冲突 

如:指定springboot相关的依赖都进行统一的版本控制,子模块引入springboot相关的依赖时,都不需要引入版本号了

<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.4.2</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>


并且,还可以在父工程统一更换远程仓库:

<repositories>
        <repository>
            <id>central</id>    <!--表示要替换中央仓库-->
            <name>aliyun maven</name> <!--对该仓库的描述,非必须-->
            <url>https://maven.aliyun.com/repository/central</url> <!--仓库地址-->
            <layout>default</layout> <!--遵循 Maven 的标准目录结构:g a v 形式-->
            <releases>
                <enabled>true</enabled> <!-- 表示允许从该仓库获取发布版本(releases版本)-->
            </releases>
            <snapshots>
                <enabled>true</enabled> <!--表示允许从该仓库获取快照版本(snapshots版本)-->
            </snapshots>
        </repository>

    </repositories>



五、编译打包

将maven打包成jar文件

    <artifactId>demo-starter</artifactId>

    <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <build>
        <finalName>${project.artifactId}</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.3.0.RELEASE</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值