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

news2024/10/6 6:44:39

目录

一、分模块设计与开发

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.coloradmin.cn/o/416405.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java Stream API 操作完全攻略:让你的代码更加出色 (二)

前言 Java Stream 是一种强大的数据处理工具&#xff0c;可以帮助开发人员快速高效地处理和转换数据流。使用 Stream 操作可以大大简化代码&#xff0c;使其更具可读性和可维护性&#xff0c;从而提高开发效率。本文将为您介绍 Java Stream 操作的所有方面&#xff0c;包括 red…

WMS仓库管理系统,你能操作明白吗?别让"智能"变"滞能"

随着社会的进步&#xff0c;智能车间、智能工厂等申报的展开&#xff0c;“智能化”的概念&#xff0c;让企业系统出现更迭。以智能化仓储管理系统为例&#xff0c;企业工厂利用WMS的优势&#xff0c;依照运行的工作标准和运算法则&#xff0c;对仓库进行精细化管理。 WM…

IC学习笔记22——memory_compilermemory_wrapper

一、memory_compiler 1.1 memory_compiler的介绍 memory_compiler为一系列工具的统称,用于生成芯片开发所需要的memory。芯片开发中所需要的memory为sram、rom等。很多公司都有自己开发的memory_compiler工具。 1.2 SRAM基础 sram写操作(写1) 将要写入的数据“1”通过写入…

Vue学习笔记(3. 基本语法,数据绑定,指令)

1. 基本语法 vue2的基本语法如下&#xff1a; <html> <head> <title>testVUE</title> <script src"https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script> </head><body><div id"app">模板…

【操作系统】深入理解Linux虚拟内存管理

【操作系统】深入理解Linux虚拟内存管理 本篇跟大家说说内存管理&#xff0c;内存管理还是比较重要的一个环节&#xff0c;理解了它&#xff0c;至少对整个操作系统的工作会有一个初步的轮廓。 虚拟内存 如果你是电子相关专业的&#xff0c;肯定在大学里捣鼓过单片机。 单片…

出口欧盟认证机构为什么推荐CE认证

产品做CE证书要什么好处&#xff0c;CE证书要什么作用&#xff1f; 在中国很多中小企业困扰的是&#xff0c;好不容易走出国门接到来自国外的订单。却因为没有相应的产品安全认证而无法顺利取得订单。或者当产品到达目的地后&#xff0c;因为无法提供相应的产品安全认证证明文件…

网络编程 端口状态都有哪些?

客户端各个状态&#xff1a; 三次握手阶段 CLOSED&#xff08;持续状态&#xff09; 关闭状态 SYN_SENT &#xff08;非常短暂&#xff09; SYN_SENT状态表示请求连接&#xff0c;当你要访问其它的计算机的服务时首先要发个同步信号给该端口&#xff0c;此时状态为SYN_SENT&a…

数据库MySQL —— 存储过程

目录 一、介绍 二、基本语法 三、变量 1. 系统变量 2. 用户自定义变量 3. 局部变量 四、流程控制语句 1. if判断 2. 参数 3. case 4. 循环 4.1 while 4.2 repeat 4.3 loop 五、游标 - cursor 六、条件处理程序 - handler 七、存储函数 一、介绍 存储过…

自学大数据第17天~Hive安装与配置及常用命令

嗨咯,好几天没更新了,你以为我不知道吗? 这几天主要还是学习,学习如何再学习! 简述以下这几天都学习了什么~ MongoDB的命令 GaussDB(for Mongo)集群架构与社区版架构的对比 社区版(副本集架构): mongos(路由) config(记录元数据) shard(负责计算和存储) GaussDB(for Mongo)存…

uni-app--》uni-app的生命周期讲解

&#x1f3cd;️作者简介&#xff1a;大家好&#xff0c;我是亦世凡华、渴望知识储备自己的一名在校大学生 &#x1f6f5;个人主页&#xff1a;亦世凡华、 &#x1f6fa;系列专栏&#xff1a;uni-app &#x1f6b2;座右铭&#xff1a;人生亦可燃烧&#xff0c;亦可腐败&#xf…

数据库的安全性

安全性 安全性保护手段 用户标识与鉴别自主存取控制强制存取控制视图审计和数据加密 数据库的安全性是指保护数据库防止因用户非法使用数据库造成数据泄露、更改或破坏 数据库安全保护分层 物理层人际层网络层操作系统层数据库系统层 物理层的安全性是指计算机系统所位于的节…

银行数字化转型导师坚鹏:银行数据治理和数据质量问题解决

银行数据治理和数据质量问题解决 课程背景&#xff1a; 很多银行存在以下问题&#xff1a; 不知道如何准确理解银保监会数据治理相关政策及要求&#xff1f; 不清楚如何有效解决数据治理及数据质量遇到的重要问题&#xff1f; 科技条线不清楚如何配合业务人员更好地提高数据…

模板方法设计模式(TemplateMethod)

文章目录抽象类语法使用说明注意事项模板方法设计模式代码示例应用抽象类 随着继承层次中一个个新子类的定义&#xff0c;类变得越来越具体&#xff0c;而父类则更一般&#xff0c;更通用。类的设计应该保证父类和子类能够共享特征。有时将一个父类设计得非常抽象&#xff0c;以…

Centos7安装Navicat15中文

1. ubuntu 下制作AppImage镜像 sudo apt-get install libcapstone-devsudo apt-get install cmake git clone https://github.com/keystone-engine/keystone.git cd keystone mkdir build cd build ../make-share.sh sudo make install sudo ldconfigsudo apt-get install rap…

【行为型模式】模板方法模式

文章目录优秀借鉴1、概述2、结构3、实现方式3.1、案例引入3.2、结构分析3.3、具体实现4、模板方法模式优缺点5、应用场景优秀借鉴 黑马程序员Java设计模式详解-模板方法模式概述 1、概述 模板方法模式(Template Method)是一种设计模式&#xff0c;它定义了一个算法的框架&am…

Nacos 2.2.2 发布,优化启动体验和鉴权提示

Nacos 社区近期发布了 2.2.0.1 和 2.2.1 版本&#xff0c;对默认鉴权插件做出了较大的改动&#xff0c;详情查看**风险说明 [ 1] **及 **2.2.1 发布 [ 2] **。由于 Nacos 默认控制台 ui 中默认依赖了 token.secret.key&#xff0c;所以在移除了 token.secret.key 的默认值后&am…

【ROS2指南-9】Bag的record和play操作

目标&#xff1a;记录在某个话题上发布的数据&#xff0c;以便您可以随时回放和检查它。 教程级别&#xff1a;初学者 时间&#xff1a; 10分钟 内容 背景 先决条件 任务 1 设置 2 选择一个主题 3 ros2包记录 4 ros2 包信息 5 ros2包玩 概括 下一步 相关内容 背景 r…

Android 性能优化的重要性~

随着移动设备和应用程序市场不断发展&#xff0c;Android应用程序变得越来越多&#xff0c;对于开发者来说&#xff0c;他们必须使自己的应用程序与其他应用程序相比更加高效和快速&#xff0c;以吸引用户和确保业务成功。而Android用户期望应用程序如同其他设备上的应用程序一…

PHP快速入门02-PHP语言基础

文章目录前言一、 数据类型1.1 String&#xff08;字符串&#xff09;1.2 Integer&#xff08;整型&#xff09;1.3 Float&#xff08;浮点型&#xff09;1.4 Boolean&#xff08;布尔型&#xff09;1.5 Array&#xff08;数组&#xff09;1.6 Object&#xff08;对象&#xff…

[ vulnhub靶机通关篇 ] 渗透测试综合靶场 DC-5 通关详解 (附靶机搭建教程)

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成习…