当前位置: 首页 > news >正文

《详解Maven的继承与聚合》一篇理解分模块设计理念,以及私服的使用

文章目录

  • Maven高级
  • 一、分模块设计
    • (1)概念
    • (2)作用
  • 二、继承与聚合
    • (1)继承
      • 1.继承关系
      • 2.版本锁定
      • 3.三种打包方式
    • (2)聚合
    • (3)继承与聚合
  • 三、私服
    • (1)介绍
    • (2)资源上传和下载
      • 1.配置上传:
      • 2.配置下载

Maven高级

一、分模块设计

(1)概念

将项目按照功能分成若干个子模块,这样的设计就叫做分模块设计。

如下图:

1.创建maven模块 tallias-pojo,存放实体类。

2.创建maven模块 talias-utils,存放相关工具类。

在这里插入图片描述

或者:
在这里插入图片描述

注意事项:

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

(2)作用

方便项目的管理维护、扩展,也方便模块间的互相调用,资源共享。

二、继承与聚合

(1)继承

1.继承关系

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

在这里插入图片描述

继承的案例

目标:我们需要达到如下图的一个继承关系,其中各个子工程都需要一个叫Lombok的包:

在这里插入图片描述

一共需要三步:

①创建 maven 模块 tlias - parent,该工程为父工程,设置打包方式为 pom (默认打包方式为 jar)。

②在子工程的 pom.xml 文件中,配置继承关系。

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

步骤:

①创建父包->tlias-parent

父包的pom文件配置如下:

 <!-- 1.设置继承的父包 -->
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.5</version><relativePath/>
</parent><groupId>com.test</groupId>
<artifactId>tlias-parent</artifactId>
<version>1.0-SNAPSHOT</version><!-- 2.设置打包方式 -->
<packaging>pom</packaging>

②创建子包

各个子包的的pom文件配置如下:

<groupId>com.test</groupId><!-- 可省略 -->
<artifactId>tlias-pojo</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 1.设置继承的父包 -->
<parent><groupId>com.test</groupId><artifactId>tlias-parent</artifactId><version>1.0-SNAPSHOT</version><relativePath>../tlias-parent/pom.xml</relativePath>
</parent>

注意事项:

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

③在父工程中配置各个工程共有的依赖

(假设每一个子工程都需要一个叫Lombok的包)

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

注意事项:

  • 若父子工程都配置了同一个依赖的不同版本,以子工程的为准

2.版本锁定

①标签<dependencyManagement>

​ 在上面讲的继承的时候,我们知道了父工程中会将大部分的公用依赖都包含,这个时候父工程中依赖会有很多,而依赖中经常会发生变化的就是【版本号】,对于依赖版本的管理我们就有了标签<dependencyManagement>

该标签只负责管理版本号,不会实际引入依赖。

在这里插入图片描述

注意事项:

<dependencyManagement><dependencies>的区别是什么?

  • <dependencies> 是直接依赖,在父工程配置了依赖,子工程会直接继承下来。
  • <dependencyManagement> 是统一管理依赖版本,不会直接依赖,还需要在子工程中引入所需依赖(无需指定版本)
  • 子工程引入依赖的时候,无需指定<version>版本号,父工程统一管理,变更依赖版本,只需再父工程中统一变更

②标签<properties>

但是如果只是这样,当依赖过多的时候,依旧是不方便查找版本号

于时就可以使用自定义属性/引用属性:<properties>

在父工程的pom文件中:

在这里插入图片描述

3.三种打包方式

在pom文件中,我们可以设置

maven中有三种打包方式:

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

(2)聚合

​ 在 Maven 中,“聚合”(Aggregation)是一种管理多模块项目的机制,用于将多个独立的 Maven 模块(Module)组织成一个统一的项目结构,实现 “一键构建所有模块” 的效果。它解决了多模块项目中需要逐个构建模块的繁琐问题,让项目管理更高效。

父项目是一个特殊的 Maven 项目,其作用仅为 “管理子模块”,自身不包含业务代码。

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

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

在这里插入图片描述

注意事项:

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

(3)继承与聚合

  • 作用
    • 聚合用于快速构建项目
    • 继承用于简化依赖配置、统一管理依赖
  • 相同点:
    • 聚合与继承的 pom.xml 文件打包方式均为 pom,可以将两种关系制作到同一个 pom 文件中
    • 聚合与继承均属于设计型模块,并无实际的模块内容
  • 不同点:
    • 聚合是在聚合工程中配置关系,聚合可以感知到参与聚合的模块有哪些
    • 继承是在子模块中配置关系,父模块无法感知哪些子模块继承了自己

实际开发中,两者通常结合使用:父项目既作为聚合的管理者(通过 modules),又作为配置的提供者(供子模块继承)。

三、私服

(1)介绍

​ 私服是一种特殊的远程仓库,它是架设在局域网内的仓库服务,用来代理位于外部的中央仓库,用于解决团队内部的资源共享与资源同步问题。

​ 依赖的查找顺序:本地仓库–>私服–>中央仓库

在这里插入图片描述

注意事项:

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

(2)资源上传和下载

在这里插入图片描述

central是从中央仓库中下载的

在这里插入图片描述

配置上传和下载都需要对maven的setting文件进行操作

其中,下载只需要在setting中配置,而上传还需要再maven工程的pom文件中配置

1.配置上传:

配置 Maven 私服的核心目标是实现项目构建产物的上传与依赖的统一管理

使用私服上传,需要在maven的setting.xml配置文件中,做出如下配置:

①setting.xml

  1. 设置私服的访问用户名 / 密码(settings.xml 中的 servers标签 中配置)
  • server标签添加 访问nexus的账号和密码
<server><id>maven-releases</id><username>admin</username><password>123</password>
</server><server><id>maven-snapshots</id><username>admin</username><password>123</password>
</server>

id标签可以自定义,但是必须和maven工程中的distributionManagement标签的id保持一致,建议按照库名设置

②pom.xml:

1.IDEA的maven工程的pom文件配置上传(发布)地址

<distributionManagement><!-- release版本 --><repository><id>maven-releases</id><url>http://192.168.150.101:8081/repository/maven-releases/</url></repository><!-- snapshot版本 --><snapshotRepository><id>maven-snapshots</id><url>http://192.168.150.101:8081/repository/maven-snapshots/</url></snapshotRepository>
</distributionManagement>

2.发布项目,直接运行deploy生命周期即可(发布时,建议跳过单元测试)

发布的项目会上传到私服,不同版本的项目上传到不同的私服上。

执行 deploy 时:

  • Maven 会读取 POM 文件中的 <distributionManagement> 配置,判断项目是 release 版本还是 snapshot 版本,然后根据版本类型将对应的构建产物上传到相应的仓库。
  • 若 POM 文件中的仓库 <id>settings.xml<server><id> 匹配,Maven 就能获取到正确的用户名和密码进行认证,从而成功上传 JAR 包到私服。

2.配置下载

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

①setting.xml

  1. mirros标签设置访问路径,并设置id。(如果之前配置过阿里云需要删除)
  • mirros标签添加 访问nexus的路径配置
<mirror><id>maven-public</id><mirrorOf>*</mirrorOf><url>http://192.168.150.101:8081/repository/maven-public/</url>
</mirror>

这里url选择的是【仓库组】:将多个仓库放入一个组,这样就无需指定多个仓库

注意事项:

如果该仓库不允许匿名访问,需要认证才能下载,则还需要如下操作:

【配置账号密码】就是使用server标签,id和mirror的id保持一致即可:

<server><id>maven-public</id><username>admin</username><password>123</password>
</server>
  1. pofiles标签中,增加如下配置:
<profile><id>allow-snapshots</id><activation><activeByDefault>true</activeByDefault></activation><repositories><repository><id>maven-public</id><url>http://192.168.150.101:8081/repository/maven-public/</url><releases><enabled>true</enabled></releases><snapshots><enabled>true</enabled></snapshots></repository></repositories>
</profile>

②pom.xml(可选)

如果setting中没有配置【pofiles标签】,那就需要进行这一步:

    <repositories><repository><id>maven-public</id><url>http://192.168.150.101:8081/repository/maven-public/</url><releases><enabled>true</enabled></releases><snapshots><enabled>true</enabled></snapshots></repository></repositories>

文章转载自:

http://2vPtBQJU.pswzc.cn
http://3CXOwIl3.pswzc.cn
http://gOFtfJTz.pswzc.cn
http://rtn0jscu.pswzc.cn
http://otXII0Pu.pswzc.cn
http://MzHBA0My.pswzc.cn
http://zVtuaLH0.pswzc.cn
http://5dSVMjSx.pswzc.cn
http://3YhIepxB.pswzc.cn
http://FoO9eTDQ.pswzc.cn
http://mKGpiHaP.pswzc.cn
http://zqsl0Sbk.pswzc.cn
http://rJejEEG7.pswzc.cn
http://30CHl8hT.pswzc.cn
http://ENN2rcRu.pswzc.cn
http://CQpm3Fxs.pswzc.cn
http://LkId4VIa.pswzc.cn
http://mHPuLKz9.pswzc.cn
http://yAqXGZSr.pswzc.cn
http://zV5mjMKB.pswzc.cn
http://RwCk87ZN.pswzc.cn
http://XUrQwYLm.pswzc.cn
http://bMUw4h82.pswzc.cn
http://slBu3hE3.pswzc.cn
http://5Ee54oi0.pswzc.cn
http://vHOu22o4.pswzc.cn
http://02Ffu8mD.pswzc.cn
http://YKhMNHCC.pswzc.cn
http://RzNsFg0w.pswzc.cn
http://JvFmIVRt.pswzc.cn
http://www.dtcms.com/a/387407.html

相关文章:

  • Linux系统服务Syslog服务
  • 985高校标杆项目:基于大数据的商店销售数据分析与可视化系统技术解析
  • OpenCV内置分类器实现简单的人脸识别
  • 基于vue社区养老管理系统3849x(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • 破解云VR教育普及难题:点量实时云渲染——实现跨终端无界协同
  • 智能合约安全常见攻击与防御
  • Docker多容器编排:Compose 实战教程
  • StarRocks 助力数禾科技构建实时数仓:从数据孤岛到智能决策
  • 重构多任务爬虫
  • 语音DDS系统核心组件详解与实现方案
  • 部署CephFS文件存储
  • 元宇宙与物流产业:数字孪生重构物流全链路运营
  • 通信算法之328:Vivado中FIFO的IP核
  • Android MediaCodec 编解码
  • Resolve JSON Reference for ASP.NET backend
  • 十一、vue3后台项目系列——封装请求,存储token,api统一化管理,封装token的处理工具
  • 一个OC的十年老项目刚接手编译报错:No Accounts: Add a new account in Accounts settings.
  • 苹果个人开发者如何实现应用下载安装
  • 【CSS】文档流
  • App 自动化:从环境搭建到问题排查,全方位提升测试效率
  • 微信小程序转uni-app
  • 深入理解线性回归与 Softmax 回归:从理论到实践
  • SSM-----Spring
  • ubuntu 24.04.02安装android-studio
  • WebRTC 定时任务Process Module
  • 【服务器挂掉了】A40和A800:“性能不足”和“系统崩溃”
  • EJS(Embedded JavaScript)(一个基于JavaScript的模板引擎,用于在HTML中嵌入动态内容)
  • 前端路由模式:Vue Router的hash模式和history模式详解
  • 信创电脑采购指南:选型要点与避坑攻略
  • 前端高级开发工程师面试准备一