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

Maven高级—分模块设计与开发、继承、聚合和私服

分模块设计与开发

分模块设计策略

这里我们采用策略一进行演示

步骤一:创建tilas-pojo

这里我们不需要选择springboot框架,因为我们的实体类不需要进行什么框架操作

这里我们要引入lombok的依赖(缺什么依赖引入什么依赖,注入依赖版本一致),但这里由于我们采用的并不是SpringBoot框架,所以引入依赖版本号不可省略,

Spring Boot 可以省略版本号,是因为它引入了「父工程」(spring-boot-starter-parent),里面已经统一声明了常用依赖的版本。

这就是所谓的「依赖版本仲裁」

tlias-utils这个模块的创建同样如此,这里有的时候引入依赖IDEA可能不识别,剪切重新粘贴一遍即可

步骤二:在tlias-web-management中引入如上两模块的依赖

继承<parent>

工程之间的依赖关系继承,便于维护和管理我们的依赖,我们使用<parent>这个标签来指明工程与工程之间的依赖关系,对于我们本次项目的依赖关系如下

Maven打包方式:

  • jar:普通模块打包,springboot项目基本都是jar包(内嵌tomcat运行)

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

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

1.实现

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

src则直接删掉

父工程tlias-parent的pom.xml文件配置如下,并设置packaging类型为pom:

<packaging>pom</packaging> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.2.5</version> <relativePath/> </parent> <groupId>com.itheima</groupId> <artifactId>tilas-parent</artifactId> <version>1.0-SNAPSHOT</version>

2). 在子工程(tlias-pojotlias-utilstlias-web-management)的pom.xml文件中,配置继承关系,tlias-web-managementtlias-pojo把原本的springboot的parent依赖删除掉即可

注意:

  • 在子工程中,配置了继承关系之后,坐标中的groupId和version是可以省略的,因为会自动继承父工程的 。

<parent> <groupId>com.itheima</groupId> <artifactId>tilas-parent</artifactId> <version>1.0-SNAPSHOT</version><relativePath>../tilas-parent</relativePath></parent> <artifactId>tilas-web-management</artifactId>

这里路径要设置为相对路径,即../父工程模块名

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

<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> </dependencies>

2.版本锁定<dependencyManagement>

如果项目拆分的模块比较多,每一次更换版本,我们都得找到这个项目中的每一个模块,一个一个的更改。 很容易就会出现,遗漏掉一个模块,忘记更换版本的情况。

在maven中,可以在父工程的pom文件中通过 `<dependencyManagement>` 来统一管理依赖版本。

在父工程中配置

<!--统一管理依赖版本--> <dependencyManagement> <dependencies> <!--JWT令牌--> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> <version>0.9.1</version> </dependency> </dependencies> </dependencyManagement>

之后子工程便可以省略<version>的配置

接下来,我们就可以将tlias-utils模块中单独配置的依赖,将其版本统一交给tlias-parent进行统一管理。

<!--统一管理依赖版本--> <dependencyManagement> <dependencies> <!--阿里云OSS--> <dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-sdk-oss</artifactId> <version>3.15.1</version> </dependency> <dependency> <groupId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactId> <version>2.3.1</version> </dependency> <dependency> <groupId>javax.activation</groupId> <artifactId>activation</artifactId> <version>1.1.1</version> </dependency> <!-- no more than 2.3.3--> <dependency> <groupId>org.glassfish.jaxb</groupId> <artifactId>jaxb-runtime</artifactId> <version>2.3.3</version> </dependency> <!--JWT--> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> <version>0.9.1</version> </dependency> </dependencies> </dependencyManagement>

同样的删除子工程的版本标签

3.属性配置

我们也可以通过自定义属性及属性引用的形式,在父工程中将依赖的版本号进行集中管理维护。 具体语法为:

1). 自定义属性

<properties><lombok.version>1.18.30</lombok.version> </properties>

2). 引用属性

<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>${lombok.version}</version> </dependency>

面试题:<dependencyManagement><dependencies>的区别是什么?

  • <dependencies>是直接依赖,在父工程配置了依赖,子工程会直接继承下来。

  • <dependencyManagement>是统一管理依赖版本,不会直接依赖,还需要在子工程中引入所需依赖(无需指定版本)

聚合<modules>

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

  • 聚合工程:一个不具有业务功能的“空”工程(有且仅有一个pom文件) 【PS:一般来说,继承关系中的父工程与聚合关系中的聚合工程是同一个

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

这里我们直接在父工程配置<modules>标签即可

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

继承与聚合对比

  • 作用

    • 聚合用于快速构建项目

    • 继承用于简化依赖配置、统一管理依赖

  • 相同点:

    • 聚合与继承的pom.xml文件打包方式均为pom,通常将两种关系制作到同一个pom文件中

    • 聚合与继承均属于设计型模块,并无实际的模块内容

  • 不同点:

    • 聚合是在聚合工程中配置关系,聚合可以感知到参与聚合的模块有哪些

    • 继承是在子模块中配置关系,父模块无法感知哪些子模块继承了自己

私服

1.介绍

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

  • 依赖查找顺序:

    • 本地仓库

    • 私服仓库

    • 中央仓库

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

2.资源上传与下载

资源上传与下载,我们需要做三步配置,执行一条指令。

第一步配置:在maven的配置文件中配置访问私服仓库的用户名、密码。

第二步配置:在项目的pom.xml文件中配置上传到私服的仓库(url地址),该配置其实也支持配在setting.xml中

第三步配置:在maven的配置文件中配置私服从公共仓库拉回来的依赖存放的仓库(url地址)。

配置好了上述三步之后,要上传资源到私服仓库,就执行maven生命周期:deploy。

简单来说就是在pom文件中配置上传的私服仓库地址,在maven的文件中进行配置私服用户名和密码以及下载的地址

私服仓库说明:

  • RELEASE:存储自己开发的RELEASE发布版本的资源。

  • SNAPSHOT:存储自己开发的SNAPSHOT发布版本的资源。

  • Central:存储的是从中央仓库下载下来的依赖。

项目版本说明:

  • RELEASE(发布版本):功能趋于稳定、当前更新停止,可以用于发行的版本,存储在私服中的RELEASE仓库中。

  • SNAPSHOT(快照版本):功能不稳定、尚处于开发中的版本,即快照版本,存储在私服的SNAPSHOT仓库中。

具体操作

1.设置私服的访问用户名/密码(在自己maven安装目录下的conf/settings.xml中的servers中配置)

<server>
<id>maven-releases</id>
<username>admin</username>
<password>admin</password>
</server>

<server>
<id>maven-snapshots</id>
<username>admin</username>
<password>admin</password>
</server>

<!--如果不涉及到下载的,可以不配置这个-->
<server>
<id>maven-public</id>
<username>admin</username>
<password>admin</password>
</server>

2.设置从公共仓库拉回来的依赖存放的仓库((在自己maven安装目录下的conf/settings.xml中的mirrors、profiles中配置)

mirrors配置

<mirror>
<id>maven-public</id>
<mirrorOf>*</mirrorOf>
<url>http://localhost:8081/repository/maven-public/</url>
</mirror>

profiles配置

<profile>
<id>allow-snapshots</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>

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

</repository>
</repositories>
</profile>

3.IDEA的maven工程的pom文件中配置上传(发布)地址(直接在tlias-parent中配置发布地址)

<distributionManagement>
<!-- release版本的发布地址 -->
<repository>
<id>maven-releases</id>
<url>http://localhost:8081/repository/maven-releases/</url>
</repository>

<!-- snapshot版本的发布地址 -->
<snapshotRepository>
<id>maven-snapshots</id>
<url>http://localhost:8081/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>

配置完成之后,我们就可以在tlias-parent中执行deploy生命周期,将项目发布到私服仓库中。

中央仓库的包:私服会缓存到自己的代理仓库(如 maven-central),同时也会下载到你电脑的本地仓库
公司自己的包:私服存到 release/snapshot 仓库,也可能会下载到本地仓库

两者都会到本地,但私服里也都会有一份(自己的包在 release/snapshot,中央的包在代理仓库)。

http://www.jsqmd.com/news/887789/

相关文章:

  • AMD Ryzen 7 3800X + VMware 15.1.0 保姆级黑苹果安装避坑指南(macOS Catalina 10.15.5)
  • 【物联网】使用MQTTX与OneNET云平台进行模拟MQTT协议通信
  • 告别假死与掉线:实战中稳定维持Metasploit会话的3个关键配置
  • STM32CubeMX保姆级教程:从零点亮STM32F103C8T6最小系统板的LED
  • 【CGLIB】使用 CGLIB 需要哪些最基本的 Maven/Gradle 依赖?社区最新稳定版本号是多少?
  • 你的图片安全吗?聊聊LSB隐写的‘易碎性’和那些年我们踩过的坑
  • Excel 物流货运记账表模板【万象EXCEL(二十七)】—东方仙盟
  • 如何在Windows电脑上轻松运行安卓应用?APK安装器的完整指南
  • 钉钉微应用本地开发避坑指南:路由模式选错、跨域配置漏了?看这篇就够了
  • Unity编辑器模拟手机大退重连工具类
  • NLP入门实战:用N-Gram模型和Python,5分钟教你打造一个简易的“文本通顺度检查器”
  • UE4新手教程:用蓝图实现按1、2键快速切换操控不同角色(附4.23.1版本节点详解)
  • Oracle EBS中库存事务是如何影响成本计算的?
  • 使用 Taotoken 后 API 调用延迟与稳定性有哪些直观感受
  • Cortex-M3/M4调试架构与多节点SWD技术解析
  • AI传动系统与燃料
  • [智能体-52]:MCP代码示例
  • 无线回散射技术与电压分复用架构在物联网传感中的应用
  • 别再让SSD越用越慢了!手把手教你检查并开启Windows/Linux/macOS的Trim功能
  • 星盘接口开发文档:星座语料接口指南
  • ARM SPE技术:硬件级性能分析与优化实践
  • 为什么苏州工厂老板都会选择响课教育做GEO优化?一文深度解读!
  • 告别黑盒:用xNIDS给深度学习入侵检测模型做个‘CT扫描’,自动生成防火墙规则
  • DeepSeek技术方案生成:从“能跑通”到“可交付”的5级成熟度跃迁路径(含Gartner对标矩阵)
  • 别再问OpenCV能干啥了!用Python+OpenCV 4.x,5分钟搞定你的第一个图像处理小程序
  • 【回眸】小红书新手运营实战指南:从账号搭建到权重引流
  • 编程语言、存储技术、数据结构、数学矩阵和系统可靠性设计范畴
  • ARM调试寄存器架构与内存映射访问机制详解
  • 别再只用ARIMA了!当数据少得可怜时,试试灰色预测GM(1,1)模型(附Python/R代码对比)
  • 避坑指南:Unity 2018/2019 WebGL透明背景设置全流程,解决PostProcess颜色异常