Maven:继承和聚合

Maven高级

分模块设计和开发

如果在我们自己的项目中全部功能在同一个项目中开发,在其他项目中想要使用我们封装的组件和工具类并不方便

不方便项目的维护和管理
项目中的通用组件难以复用

所以我们需要使用分模块设计

分模块设计

请添加图片描述

在项目设计阶段,可以将大的项目拆分成若干模块,按功能拆分,每个模块都是独立的.

先针对模块功能进行设计,再进行编码.

方便项目的管理和维护
方便模块间的相互调用和资源共享

分模块设计的优势

如果直接对项目进行依赖,因为会将所有工具类全部依赖进来,会影响性能,同时相当于整个业务代码全部公开,非常不安全.

继承

创建一个父工程,让其他模块对其进行继承,这样就可以将各个模块中共有的依赖都提取到父工程中进行配置,这样子工程都会继承父工程的依赖.
在子工程中通过

<parent>
</parent>

标签对父工程坐标进行指定

继承关系

Maven不支持多继承

因为Spring工程存在统一的父工程spring-boot-starter-parent

如果继承spring-boot-starter-parent就无法继承我们自定义的父工程tlias-parent

所以我们可以将统一父工程交给父工程去继承,如下所示

请添加图片描述

注:父工程打包的方式必须为pom

<packaging>pom</packaging>
Maven的打包方式

jar:默认打包方式,内嵌tomcat运行

war:普通web程序的打包方式,需要部署在外部的tomcat服务器中运行

pom:父工程或聚合工程,不写代码仅进行依赖管理

父子工程结构

可以同级也可以将子工程写在父工程下

版本锁定

当一个依赖不是被所有模块使用时,我们没有必要将其添加到

<dependencies></dependencies>

中,可以使用

<dependencyManagement></dependencyManagement>

进行统一的依赖版本管理,不会使依赖被所有子工程引用,同时使需要这些依赖的子模块引用更方便,版本统一.

<properties>
    <maven.compiler.source>11</maven.compiler.source>
    <maven.compiler.target>11</maven.compiler.target>
    <jjwt.version>0.9.1</jjwt.version>
</properties>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt</artifactId>
            <version>${jjwt.version}</version>
        </dependency>
    </dependencies>
</dependencyManagement>

在父工程中的中指定版本,通过在

<properties></properties>

中我们可以将版本抽取成变量,格式如上所示,这个版本变量${…}可以直接在父工程和子工程中使用.

通过这样的版本统一设置,我们就可以在子工程中无需设置版本,只需要groupId和artifactId就可以进行依赖

<dependency>
     <groupId>io.jsonwebtoken</groupId>
     <artifactId>jjwt</artifactId>
</dependency>

聚合

对有继承关系的多个工程进行打包时,关系错综复杂,是可能出现问题的(找不到依赖,找不到模块等等),需要先将子模块先执行install到本地仓库,再对父模块进行打包.

如果使用maven的聚合

就可以实现对项目的一键构建(清理,编译,测试,打包安装等)
聚合:将多个模块组织成一个整体,同时进行项目的构建

无需根据依赖关系手动构建,可以直接在聚合工程上构建

聚合工程:一个不具有业务功能的"空"工程(有且仅有一个pom文件),其中没有代码,一般就是继承关系中的父工程

聚合的实现

在聚合工程中的pom文件中,在modules标签中对模块进行整合

<modules>
	<module>../tlias-pojo</module>
  	<module>../tlias-utils</module>
  	<module>../tlias-web-management</module>
</modules>

聚合之后子模块会在聚合在聚合工程下

只要对聚合工程执行package打包命令就会对聚合的所有模块执行打包命令,即一键构建.

继承和聚合的对比

聚合用于快速构建项目

继承用于简化依赖的配置和统一管理依赖

相同点

聚合和继承的pom文件打包方式均为pom,聚合工程和继承的父工程往往为同一个工程

聚合和继承都属于设计型模块,并无实际模块内容

不同点

聚合是在聚合工程中进行关系配置,可以感知到参与聚合的模块(modules中写明了参与聚合的模块)

继承是在子模块中进行配置(写明parent),父模块无法感知到哪些子模块继承了自己

私服

快照版本(snapshot):存入快照仓库

不断的开发更新,可以对同一个快照版本进行多次发布

<version>1.0-SNAPSHOT</version>

发布版本(release):存入发布仓库

相对稳定的对外版本

<version>1.0</version>

Central仓库

存储从中央仓库下载的依赖

快照版会用最新版本覆盖

发布版不会被覆盖

私服配置

在本地maven的设置中配置依赖下载地址

在本地maven的设置中配置私服的访问用户名和密码

在maven工程pom文件中配置上传地址

  • 16
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值