Maven高级操作--分模块设计、聚合、继承和私服

一、分模块设计与开发

1.1 分模块设计

  • 问题:当项目做大做强的时候,前面的基础Spring开发的框架都无法满足java大型项目的维护和复用,而且团队合作也会造成较大的困难。
  • 所以就需要分模块设计:将项目按照功能拆分成若干个子模块,方便项目的管理维护扩展,也方便模块间的相互调用资源共享

分模块开发需要先针对模块功能进行设计,再进行编码。不会先将工程开发完毕,然后进行拆分。

  • 大概步骤:
  1. 创建一个新的maven项目,并填写需要分出去的模块名。
  2. 在原项目下将模块的包,如utils包下的类,放到目标maven项目下,目录名字保持一致main\java\com\mannor\utlis
  3. 将需要的依赖项导入到新maven中。
  4. 将新maven导入到原来的项目pom.xml文件中,即可食用。

二、继承与聚合

2.1 继承

  • 概念:继承描述的是两个工程间的关系,与java中的继承相似,子工程*可以继承父工程中的配置信息,常见于依赖关系的继承**。
  • 作用:简化依赖配置、统一管理依赖
  • 实现:<parent> ... </parent>

2.1.1 继承关系的实现

  1. 创建maven模块tlias-parent,该工程为父工程,设置打包方式**pom**(默认jar)。
    <!-- 只截取了关键部分代码 --><!-- 设置父工程 --><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.12</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.mannor</groupId><artifactId>tlias-parent</artifactId><version>0.0.1-SNAPSHOT</version><packaging>pom</packaging> <!-- 设置打包方式 --></project>
  1. 子工程pom.xml文件中,配置继承关系。
    <!-- 只截取了关键部分代码 --><parent><groupId>com.mannor</groupId><artifactId>tlias-parent</artifactId><version>0.0.1-SNAPSHOT</version><relativePath>../tlias-parent/pom.xml</relativePath> <!-- 父工程的pom文件的相对路径 --></parent><artifactId>tlias-web-management</artifactId><version>0.0.1-SNAPSHOT</version><name>tlias-web-management</name><description>tlias-web-management</description>
  1. 父工程中配置各个工程共有的依赖(子工程会自动继承父工程的依赖)。
  • 代码展示略。

2.1.1.1 继承关系图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-a6mOZ6ev-1688110403571)(24_files/1.jpg)]

2.1.1.2 重点

  1. 在子工程中,配置了继承关系之后,坐标中的groupId是可以省略的,因为会自动继承父工程的。
  2. relativePath指定父工程的pom文件的相对位置(如果不指定,将从本地仓库/远程仓库查找该工程)。
  3. 若父子工程都配置了同一个依赖的不同版本,以子工程的为准。

常见的打包方式:
jar:普通模块打包,springboot项目基本都是jar包(内嵌tomcat运行)
war:普通web程序打包,需要部署在外部的tomcat服务器中运行
pom:父工程或聚合工程,该模块不写代码,仅进行依赖管理

2.1.2 版本锁定

2.1.2.1 版本管理

  • 在maven中,可以在父工程的pom文件中通过<dependencyManagement>来统一管理依赖版本。
  • 子工程引入依赖时,无需指定<version>版本号,父工程统一管理。变更依赖版本,只需在父工程中统一变更。
  1. 在父工程中:
 <!--  统一管理依赖版本:只是版本的管理,不会有直接依赖 --><dependencyManagement><dependencies><!--  jwt令牌--><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.9.1</version></dependency></dependencies></dependencyManagement>
  1. 在子工程中直接引用即可,无需指定版本号:
    <dependencies> <!--  jwt令牌--><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId></dependency></dependencies>

2.1.2.2 自定义属性/引用属性

  • 在大型开发中,会有许多依赖需要引用,所以有自定义属性来直接管理版本信息,更方便后期的维护。
  1. 自定义属性:
    <properties><lombok.version>1.18.24</lombok.version></properties>
  1. 引用属性
    <dependencies><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>${lombok.version}</version></dependency></dependencies>

思考?<dependencyManagement><dependencies>的区别是什么?
1.<dependencies>是直接依赖,在父工程配置了依赖,子工程会直接继承下来。
2.<dependencyManagement>`是统一管理依赖版本,不会直接依赖,还需要在子工程中引入所需依赖(无需指定版本)

2.2 聚合

  • 当项目开发完毕时,要对目标工程执行打包的操作。目标工程会在本地的maven仓库中去寻找对应依赖的jar包,不然就不会构建成功。
  • 要想将jar包放到maven的本地仓库就要按照顺序执行对应maven项目或者模块的install操作,这样才会打包成功。

当然这种方式的缺点也很明显,就是当项目模块的数量很多的时候就不便于操作了。所以就需要maven的聚合。

2.2.1 概念

2.2.1.1 聚合:

  • 将多个模块组织成一个整体,同时进行项目的构建。

2.2.1.2 聚合工程

  • 一个不具有业务功能的“空”工程(有且仅有一个pom文件)---->parent父工程就刚好可以充当这样得到角色。

2.2.1.3. 作用

  • 快速构建项目(无需根据依赖关系手动构建,直接在聚合工程上构建即可)

2.2.2 操作实现

  • maven中可以通过<modules>设置当前聚合工程所包含的子模块名称

聚合工程中所包含的模块,在构建时,会自动根据模块间的依赖关系设置构建顺序,与聚合工程中模块的配置书写位置无关。

  • 源码实现,在父工程的pom.xml文件下:
    <!--  聚合其他模块  --><modules><module>../tlias-pojo</module>   <!-- 在里面填写需要聚合模块的相对路径 --><module>../tlias-utlis</module><module>../tlias-web-management</module></modules>
  • 最后操作:执行父工程的install或clean等指令和程序。

2.3 继承与聚合的区别

2.3.1 作用

  • 聚合用于快速构建项目
  • 继承用于简化依赖配置、统一管理依赖

2.3.2 相同点:

  • 聚合与继承的pom.xml文件打包方式均为pom,可以将两种关系制作到同一个pom文件中聚合与继承均属于设计型模块,并无实际的模块内容

2.3.3 不同点:

  • 聚合是在聚合工程中配置关系,聚合可以感知到参与聚合的模块有哪些继承是在子模块中配置关系,父模块无法感知哪些子模块继承了自己

三、maven的私服

1.介绍

  • 私服是一种特殊的远程仓库,它是架设在局域网内的仓库服务,用来代理位于外部的中央仓库,用于解决团队内部的资源共享与资源同步问题。
  • 依赖查找顺序:–>本地仓库–>私服–>中央仓库

私服在企业项目开发中,一个项目/公司,只需要一台即可(无需我们自己搭建,会使用即可)。

2.资源的上传和下载

  • 项目版本:
    • RELEASE(发行版本)︰功能趋于稳定、当前更新停止,可以用于发行的版本,存储在私服中的RELEASE仓库中。
    • SNAPSHOT(快照版本)︰功能不稳定、尚处于开发中的版本,即快照版本,存储在私服的SNAPSHOT仓库

3.具体操作

  1. 设置私服的访问用户名/密码(settings.xml中的servers中配置)。
  2. IDEA的maven工程的pom文件中配置上传(发布)地址。
  3. 设置私服依赖下载的仓库组地址(settings.xml中的mirrors、profiles中配置。

因为私服的信息配置都是固定的步骤,所以我将私服的配置操作在此省略,单独写成md文件,需要的可以私我发你。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/2382.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uniapp小程序订阅消息推送+Thinkphp5后端代码教程示例

记录一下通过uniapp开发小程序消息推送的实例&#xff0c;配合后端tp推送&#xff0c;之前写的项目是微信小程序而且后端是原生php&#xff0c;这次通过项目记录一下 目录 回顾access_token获取规则以及思路 第一步&#xff1a;设计前端触发订阅事件第二步&#xff1a;设计将to…

bochs编译安装

编译命令 ./configure --prefix‘/usr/local/bochs2.7’ --enable-debugger --enable-disasm --enable-iodebug --enable-x86-debugger --with-x --with-x11 make sudo make install 配置文件 bochsrc # configuration file generated by Bochs plugin_ctrl: unmapped1, biosde…

设计消息模块的业务层Web层

目录 业务层 一、定义Message业务接口 二、定义Message业务实现类 Web层 一、获取分页消息列表 二、根据ID查询消息 三、把未读消息更新成已读消息 四、删除消息 业务层 一、定义Message业务接口 创建 MessageService.java 类 public interface MessageService {pub…

C++【位图/布隆过滤器—海量数据处理】

文章目录 一、位图&#xff08;1&#xff09;位图概念介绍&#xff08;2&#xff09;简单模拟实现&#xff08;3&#xff09;位图应用 二、布隆过滤器&#xff08;1&#xff09;关于布隆过滤器概念及介绍&#xff08;2&#xff09;布隆过滤器的使用场景&#xff08;3&#xff0…

性能测试的具体流程

文章目录 1. 确定性能测试目标及指标2. 设计测试场景3. 配置测试环境4. 编写测试脚本5. 进行性能测试6. 分析测试结果7. 提出优化建议8. 进行反复测试和调整 以下是一个基本的性能测试过程&#xff0c;旨在帮助了解性能测试的具体流程和步骤。 1. 确定性能测试目标及指标 首先…

多层感知机与深度学习算法概述

多层感知机与深度学习算法概述 读研之前那会儿我们曾纠结于机器学习、深度学习、神经网络这些概念的异同。现在看来深度学习这一算法竟然容易让人和他的爸爸机器学习搞混…可见深度学习技术的影响力之大。深度学习&#xff0c;作为机器学习家族中目前最有价值的一种算法&#…

JAVA开发(记一次504 gateway timeout错误排查过程)

一、问题与背景&#xff1a; 最近在发布一个web项目&#xff0c;在测试环境都是可以的&#xff0c;发布到生产环境通过IP访问也是可以的&#xff0c;但是通过域名访问就出现504 gateway timeout。通过postman去测试接口也是一样。ip和端口都可以通&#xff0c;域名却不行&…

MySql高级篇-006 MySQL架构篇-02MySQL的数据目录:数据库下的主要目录结构、文件系统如何存储数据

第02章_MySQL的数据目录 1.MySQL8的主要目录结构 # 查询名称叫做mysql的文件目录都有哪些[rootatguigu07 ~]# find / -name mysql安装好MySQL 8之后&#xff0c;我们查看如下的目录结构&#xff1a; 1.1 数据库文件的存放路径 MySQL数据库文件的存放路径&#xff1a;/var/…

商业综合体智能管理系统

自主研发的商业综合体智能管理系统和智能硬件&#xff0c;并针对行业不同需求&#xff0c;推出了不同行业的创新解決方案和服务。该系统能够提高商业综合体的管理效率和安全性&#xff0c;为商业综合体的经营和服务增加更多的价值。全自动智能完成无需人工干预&#xff0c;从而…

基于HTML5的手术室信息管理系统的设计与实现(源码+文档+数据库)

本文通过对现有手术室信息管理系统分析&#xff0c;设计了一套基于 HTML的手术室信息管理系统&#xff0c;实现了患者信息、手术记录及术后随访等功能&#xff0c;提高了手术室工作效率。 本系统实现了患者基本资料的录入及基本信息的查询&#xff0c;提供了术前准备情况及术中…

计算机网络—网络层

文章目录 网络层服务虚电路网络数据报网络 IPv4IP数据报IP数据报分片 IP编址&#xff08;IPv4&#xff09;有类IP地址IP子网划分子网掩码 无类IP地址&#xff08;CIDR&#xff09;DHCPNATICMP协议 路由算法链路状态路由算法距离向量路由算法不同子网之间的路由算法学习RIP协议O…

less和sass

less和sass 相比于css解决了什么问题&#xff1f; 答案&#xff1a;less和sass可以嵌套&#xff0c;可以使用变量&#xff1b;而css不可以 BEM/CSS modules/Atomic CSS/CSS in JS&#xff0c;这些方案应用于工程化中&#xff0c;解决了的问题是&#xff1a; 多人协同/大规模场…