【Java Web】015 -- Maven高级(分模块设计与开发、继承与聚合、私服)

news/2024/9/22 14:24:16/

目录

一、分模块设计与开发

1、为什么要分模块设计?

2、实践:分模块开发

①、实现步骤

3、小结

二、继承与聚合

继承

1、继承关系

①、为什么要在Maven工程中实现继承?

②、继承关系实现

③、继承实现小结

④、maven项目父子工程结构说明

2、版本锁定

①、什么是版本锁定 & 为什么进行版本锁定?--(统一管理依赖的版本号)

②、自定义属性/引用属性

③、思考: 与 的区别是什么?

聚合

1、为什么要聚合?

2、聚合功能的实现

3、小结(继承与聚合的异同点)

三、私服

1、介绍

2、资源上传与下载

①、仓库介绍(2种类型)

②、资源上传与下载实现

③、本地私服

④、小结


一、分模块设计与开发

1、为什么要分模块设计?

如果不进行分模块设计,会导致项目不便维护、难以复用

所以,答案就在眼前,我们要对项目进行分模块设计:(这样更加便于项目的维护和管理)

2、实践:分模块开发

①、实现步骤

示例:

Ⅰ、正常创建一个Maven模块即可,创建tlias-pojo

Ⅱ、将之前案例中的pojo的所有代码复制到tlias-pojo模块中:(如有报错,需要自行修改、引入依赖)

Ⅲ、在拆分的原项目tlias-web-management中的pom.xml文件中引入tlias-pojo依赖:

Ⅳ、创建tlias-utils模块:

Ⅴ、拷贝utils文件到tlias-utils模块,并引入对应依赖(JWT):

Ⅵ、在原项目tlias-web-management中的pom.xml文件中引入tlias-utils依赖:

3、小结

二、继承与聚合

继承

1、继承关系

Maven工程之间也可以实现继承关系

示例:(所有的SpringBoot工程都有一个统一的父工程:Spring-boot-starter-parent)

①、为什么要在Maven工程中实现继承?

如上图所示,在上一节中,我们将项目分成了三个模块,但三个模块都共同使用了 lombok 这个依赖,后面随着项目开发的逐渐复杂,重复的依赖会越来越多,Maven的继承就是来解决这个问题的。

②、继承关系实现

在Maven当中,一个工程只能继承一个父工程,正如类与类之间只能单继承,但支持多重继承,即 A继承B,B继承C

示例:

Ⅰ、创建父工程模块 tlias-parent

Ⅱ、tlias-parent的打包方式设置为pom,并指定继承:

由于tlias-parent是作为一个父工程来使用的,所以里面不会写任何的Java代码,所以模块中的src文件可以直接删掉:

Ⅲ、在子工程tlias-web-management中指定继承:

Ⅳ、在 tlias-pojo 以及 tlias-utils 中添加一样的父继承指定:

Ⅴ、在父工程(tlias-parent)中配置各个模块共有的依赖:(如 lombok)

③、继承实现小结

Ⅰ、创建Maven模块tlias-parent,该工程为父工程,设置打包方式pom:

Ⅱ、在子工程的pom.xml文件中,配置继承关系:

Ⅲ、在父工程中配置各个工程共有的依赖(子工程会自动继承父工程的依赖)

一般情况下,如果我们在父工程中配置了这个依赖,那么我们在子工程中就不用再配置这个依赖了

④、maven项目父子工程结构说明

两种都可以使用,只是第二种会显得更加清晰:

2、版本锁定

①、什么是版本锁定 & 为什么进行版本锁定?--(统一管理依赖的版本号)

共有依赖可以定义在父工程中,但并不是所有的依赖都是共有的,有的依赖是某个模块所独有的,那么我们就需要在这个模块中单独引入该依赖,并且,我们还要保证这些模块的依赖版本一致:解决这个问题的方法就是版本锁定

示例:(我们可以在父工程中对JWT依赖使用<dependencyManagement>进行依赖版本的管理)

注意:在父工程中的<dependencyManagement>标签中进行版本号管理的依赖并不会被子工程自动引入,在子工程中还是需要手动引入这个依赖才行,只不过无需再指定版本号了。

②、自定义属性/引用属性

在<propeties>标签中可以自定义属性标签,我们可以利用这个功能来进行版本号的统一管理:

示例:

③、思考:<dependcyManagement> 与 <dependencies> 的区别是什么?

聚合

1、为什么要聚合?

对模块的打包过程:

在上一个例子中,如果我们在tlias-web-management模块中进行package操作,会出现以下错误:BUILD FAILURE

这是由于我们没有安装 tlias-pojo 以及 tlias-utils 这两个模块,我们可以对其进行 install 操作:

之后,我们再对tlias-web-management模块中进行package操作,结果还是 BUILD FAILURE

报错:找不到tlias-parent,我们对这个父工程tlias-parent也进行install操作,此时再对tlias-web-management模块中进行package操作,即可 BUILD SUCCESS

从上面的操作,我们可以看出,我们通过普通的方式来对一个分模块的项目进行打包,过程变得过于麻烦,我们对主项目进行打包,需要分别将其它模块进行 install 才行,而 Maven 的聚合功能就是要解决这个问题的,让你轻松一键构建项目编译,一键打包,一键安装等等。

2、聚合功能的实现

示例:

Ⅰ、在tlias-parent的pom文件中聚合其它模块:

Ⅱ、以对tlias-parent生命周期的clean操作为例:

聚合之后,所有模块都会执行该操作

3、小结(继承与聚合的异同点)

三、私服

1、介绍

原因:Maven的中央仓库,需要联网,全球唯一,且由maven官方维护,那么要想解决团队资源共享问题:我们可以搭建私服

在正常开发中,我们只要学会如何在私服中上传jar包,以及如何从私服中下载依赖即可

2、资源上传与下载

①、仓库介绍(2种类型)

该仓库存储的就是从中央仓库中下载下来的jar

而下面的两个仓库,存放的都是项目组内部共享的资源

两个仓库的原因和项目版本有关:

②、资源上传与下载实现

将自己写的模块打成jar包上传到私服:

(1)设置私服的访问用户名/密码(settings.xml中的servers中配置)

(2)IDEA的maven工程的pom文件中配置上传(发布)地址:

 

(3)设置私服依赖下载的仓库组地址(settings.xml中的mirrorsprofiles中配置)

 

在项目中的pom.xml文件添加以下内容:

 

具体内容可以参考私服配置文档:

 

对项目执行deploy:

 

执行结果:

 

新打开一个maven项目,测试是否可以将上传到私服的jar包下载下来:

 

③、本地私服

④、小结


http://www.ppmy.cn/news/43092.html

相关文章

TensorFlow 2.0 快速入门指南:第一部分

原文&#xff1a;TensorFlow 2.0 Quick Start Guide 协议&#xff1a;CC BY-NC-SA 4.0 译者&#xff1a;飞龙 本文来自【ApacheCN 深度学习 译文集】&#xff0c;采用译后编辑&#xff08;MTPE&#xff09;流程来尽可能提升效率。 不要担心自己的形象&#xff0c;只关心如何实现…

工资六千的岗位面试了6轮

看到有网友说工资六千的岗位面试了6轮&#xff0c;不禁感慨&#xff0c;这公司的面试流程有多复杂。一个工资六千的岗位需要面试6轮&#xff0c;同时不得不佩服这位求职者毅力和耐心&#xff0c;要是我&#xff0c;估计3次我就觉得多了&#xff0c;工资六千面试需要6次还能够坚…

数据库设计案例

一个专辑可以包含多个曲目&#xff0c;一个曲目只能属于一个专辑 一对多 一个专辑可以包含多条短评&#xff0c;一条短语只能属于一个专辑 一对多 一个用户可以包含多条短评&#xff0c;一个短评只能属于一个用户 一对多 一个专辑可以属于多个用户&#xff0c;一个用户…

〖Python网络爬虫实战⑮〗- pyquery的使用

订阅&#xff1a;新手可以订阅我的其他专栏。免费阶段订阅量1000python项目实战 Python编程基础教程系列&#xff08;零基础小白搬砖逆袭) 说明&#xff1a;本专栏持续更新中&#xff0c;目前专栏免费订阅&#xff0c;在转为付费专栏前订阅本专栏的&#xff0c;可以免费订阅付费…

云原生网络之微隔离

本博客地址&#xff1a;https://security.blog.csdn.net/article/details/130044619 一、微隔离介绍 1.1、微隔离概念 在主体执行动作时&#xff0c;对主体权限和行为进行判断&#xff0c;最常见的是网络访问控制&#xff0c;也就是零信任网络访问&#xff08;ZTNA&#xff…

C语言结构体练习:【通讯录(静态数组简易版)的实现】

全文目录&#x1f600; 前言&#x1f914; 模块和功能划分&#x1f928; 数据类型的选择&#x1f62e; 功能序号类型 enum&#x1f62e; 个人信息类型 PeoInfo&#x1f62e; 通讯录类型 Contact&#x1f635;‍&#x1f4ab; 功能的实现&#x1f644; 初始化通讯录 InitContact…

数字孪生之ThingJS

数字孪生对象层级关系获取对象的方法对象层级关系 获取对象的方法 通过加载事件获取根对象&#xff0c;从而去获取子对象app.on("load", function(ev){var campus ev.campus; // 园区对象集合var buildings campus.buildings; // 建筑对象集合// var building…

一位腾讯在职7年测试工程师的心声...

作为一个在腾讯工作7年的测试工程师&#xff0c;今天就来聊聊腾讯工作压力到底从何而来。 压力的开始&#xff1a;时间回到7年前&#xff0c;我人生中的第一份实习工作&#xff0c;是在腾讯公司做一个自动化测试工程师。当时的我可谓意气风发&#xff0c;想要大干一场&#xf…