【javaWeb & Maven高级】Maven高级学习

Maven高级学习

分模块设计

为什么需要进行分模块设计?

将项目按照功能拆分成若干个子模块,方便项目的管理维护,扩展,也方便模块间的相互调用,资源共享

在进行大型项目的时候是很多人同时进行一个项目的开发,为了更加方便多人同时开发,我们将进行分模块化设计

创建maven模块 tlias-pojo,存放实体类

创建maven模块 tlias-utils,存放相关工具类

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

创建模块,填写坐标

创建成功子模块之后添加所需要的对应依赖,完成子模块的设计

继承与聚合

继承

当多个模块进行开发的时候,有许多重复的依赖,我们需要重复的引入这些依赖,当我们所有的模块有一个父工程的时候,将重复的依赖都引入到父工程当中,其余的直接来继承父工程,就会直接继承依赖

作用:简化依赖配置,统一管理依赖

实现:<parent>...</parent>

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

  • 常见的打包方式

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

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

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

注意:一个工程只能继承一个父工程

所有的Spring工程会继承一个夫工程,那这时我们创建一个父工程,这时应该怎么办?

让这个父工程继承那个父工程,我们在继承自定义的父工程

继承父工程的时候需要引入父工程的依赖

java 复制代码
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>3.2.4</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>

注意:依赖中的<relativePath/>自闭合表示在本地仓库中进行父工程的查找,标签的含义是父工程的相对路径

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

版本锁定

在maven中,可以在父工程的pom中通过一个标签<dependencyManagement>来统一管理依赖版本

在父工程中管理标签但是不会将依赖引进

注意:子工程引入依赖时,无需指定<version>版本号,父工程统一管理,变更依赖版本,只需在父工程中统一变更

  • 自定义属性/引用属性
java 复制代码
<properties>
<lombok.version>1.18.24</lombok.version>
<jjwt.version>0.9.0</jjwt.version>
</properties>

在管理标签中

java 复制代码
<version>${jjwt.version}</version>

<dependencyManagement><dependencies>的区别是什么?
<dependencies>是直接依赖,在父工程配置了依赖,子工程会直接继承下来。
<dependencyManagement>是统一管理依赖版本,不会直接依赖,还需在子工程中引入所需依赖

聚合

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

要想实现聚合功能,就必须实现一个聚合工程

集合工程:一个不具有业务功能的"空"工程(有且仅有一个pom文件)

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

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

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

  • 继承与聚合

作用:

聚合用于快速构建项目

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

相同点:

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

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

不同点:

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

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

私服

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

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

资源的上传与下载

私服中的仓库:

central:中央仓库,这个仓库中的jar包是从中央仓库中下载下来的jar包

项目版本:

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

snapshot(快照版本):功能不稳定,尚处于开发之中的版本,及快照版本,存储在私服中的snapshot仓库中

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

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

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


点击生命周期中的deploy进行发布

本地私服配置

  1. 解压:apache-maven-nexus.zip
  2. 进入目录:apache-maven-nexus\nexus-3.39.0-01\bin
  3. 启动服务:双击 start.bat
  4. 访问服务:localhost:8081
相关推荐
小马爱打代码18 分钟前
Spring源码 第九篇:Spring 5 源码深度拆解 - Spring 事件驱动模型
java·后端·spring
吃好睡好便好22 分钟前
创建魔方矩阵和单位矩阵
开发语言·人工智能·学习·线性代数·matlab·矩阵
星夜夏空9933 分钟前
STM32单片机学习(21) —— I2C通信
stm32·单片机·学习
ForgeAI码匠1 小时前
ForgeAdmin|Spring Boot 3 后台框架的自动配置设计:少写配置,多做组合
java·spring boot·后端
tongluowan0071 小时前
Redisson的参数及工作原理
java·redis·lua·分布式锁
仙俊红1 小时前
Integer\int对比,equals()\hashcode面试
java·面试·职场和发展
WiChP2 小时前
【V0.1B10】从零开始的2D游戏引擎开发之路
java·数据库·游戏引擎
云烟成雨TD2 小时前
Spring AI Alibaba 1.x 系列【60】检查点机制原理与全流程剖析
java·人工智能·spring
ForgeAI码匠2 小时前
Maven 多模块项目如何避免越写越乱?Forge Admin 的模块边界实践
java·人工智能·开源·maven
z落落2 小时前
C# 数组 最终完整版全套笔记(一维+多维+交错+引用类型+对象数组)
java·笔记·c#