javaWeb开发之Maven高级

1.分模块设计与开发

如果项目不分模块,意味着所有的业务代码都写在这一个 Java 项目当中,随着这个项目的业务扩张,项目当中的业务功能可能会越来越多,项目管理和维护就非常困难,项目中的通用组件难以复用

分模块设计我们在进行项目设计阶段,就可以将一个大的项目拆分成若干个模块,每一个模块都是独立的

比如将商品的相关功能放在商品模块当中,搜索的相关业务封装在搜索模块当中等。为了组件的复用,可以将项目当中的实体类、工具类以及我们定义的通用组件都单独的抽取到一个模块当中

策略:

策略一:按照功能模块拆分,比如:公共组件、商品模块、搜索模块、购物车模块、订单模块等

策略二:按层拆分,比如:公共组件、实体类、控制层、业务层、数据访问层

策略三:按照功能模块 + 层拆分

2.分模块设计实践(以tlias为例子)

将pojo包下的实体类,抽取到一个maven模块中 tlias-pojo

将utils包下的工具类,抽取到一个maven模块中 tlias-utils

其他的业务代码,放在tlias-web-management这个模块中,在该模块中需要用到实体类pojo、工具类utils,直接引入对应的依赖即可

注:分模块开发需要先针对模块功能进行设计,再进行编码

实现:

步骤一:

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

  • 然后在tlias-pojo中创建一个包 com.itheima.pojo

  • 将原来案例项目 tlias-web-management 中的pojo包下的实体类,复制到 tlias-pojo 模块中

  • tlias-pojo 模块的pom.xml文件中引入依赖

  • 删除原有案例项目 tlias-web-management 的pojo包,然后在pom.xml中引入 tlias-pojo的依赖

步骤二:

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

  • 然后在 tlias-utils 中创建一个包 com.itheima.utils

  • 将原来案例项目 tlias-web-management 中的util包下的实体类,复制到 tlias-utils 模块中

  • tlias-utils 模块的 pom.xml 文件中引入依赖

  • 删除原有案例项目 tlias-web-management 的util包,然后在pom.xml中引入 tlias-utils 的依赖

完成模块的拆分

3.继承与聚合

模块当中重复的依赖可能会很多很多,配置是比较繁琐的

继承:

可以再创建一个父工程 tlias-parent ,然后让上述的三个模块都来继承这个父工程,再将各个模块中共有的依赖提取到父工程 tlias-parent中进行配置,只要子工程继承了父工程,依赖它也会继承下来,无需在各个子工程中进行配置了

语法格式:

Maven不支持多继承,一个maven项目只能继承一个父工程

可以让创建的三个模块,都继承 tlias-parent,而 tlias-parent 再继承 spring-boot-starter-parent

实现:

步骤一:

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

  • 工程结构如下(src目录不需要,直接删除)

父工程tlias-parentpom.xml 文件配置:

步骤二:

  • 在子工程(tlias-pojotlias-utilstlias-web-management)的pom.xml文件中,配置继承关系

步骤三:

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

子工程中的这一项依赖,就可以直接删除了

Maven打包方式:

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

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

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

4.版本锁定

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

父工程:

子工程:

注:

在父工程中所配置的 <dependencyManagement> 只能统一管理依赖版本,并不会将这个依赖直接引入进来

子工程要使用这个依赖,还是需要引入的,只是此时就无需指定 <version> 版本号,变更依赖版本,只需在父工程中统一变更

实现:(以tlias-utils为例

步骤一:

  • tlias-parent 中的配置

步骤二:

  • tlias-utils 中的pom.xml配置,如果依赖的版本已经在父工程进行了统一管理,所以在子工程中就无需再配置依赖的版本

属性配置:

可以通过自定义属性及属性引用的形式,在父工程中将依赖的版本号进行集中管理维护

自定义属性语法:

<properties>

<lombok.version>1.18.34</lombok.version>

</properties>

引用属性:

可以在父工程中,将所有的版本号,都集中管理维护起来

5.聚合

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

实现:

在聚合工程中通过 <moudules> 设置当前聚合工程所包含的子模块的名称

可以在 tlias-parent中,添加配置来指定当前聚合工程,需要聚合的模块

此时要进行编译、打包、安装操作,就无需在每一个模块上操作,只需要在聚合工程上,统一进行操作就可以

6.继承与聚合的对比

作用:

聚合用于快速构建项目

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

相同点:

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

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

不同点:

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

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

7.私服

我们在项目中需要使用其他第三方提供的依赖,如果本地仓库没有,会自动连接私服下载,如果私服没有,私服此时会自动连接中央仓库,去中央仓库中下载依赖,然后将下载的依赖存储在私服仓库及本地仓库中

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

依赖查找顺序:

本地仓库-》私服仓库-》中央仓库

注:私服在企业项目开发中,一个项目/公司,只需要一台即可

8.资源上传与下载

步骤:三步配置+一条指令

  • 在maven的配置文件中配置访问私服的用户名、密码(在自己maven安装目录下的conf/settings.xml中的servers中配置)
  • 在maven的配置文件中配置连接私服的地址(url地址)(在自己maven安装目录下的conf/settings.xml中的mirrors中配置)
  • 在项目的pom.xml文件中配置上传资源的位置(url地址)(在自己maven安装目录下的conf/settings.xml中的profiles中配置
  • IDEA的maven工程的pom文件中配置上传地址(直接在tlias-parent中配置发布地址)
  • 执行maven生命周期:deploy

私服仓库说明;

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

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

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

项目版本说明:

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

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

相关推荐
xu_ws1 小时前
spring通过三级缓存解决循环依赖
java·spring·缓存·循环依赖
Chase_______1 小时前
Java 基础语言 ③:流程控制与数组——从条件分支到数组遍历,一篇通关
java·数据库·python
青槿吖1 小时前
第一篇:Elasticsearch 入门踩坑记:从 “URL 拼写错误” 到跑通第一个搜索服务
大数据·elasticsearch·搜索引擎·spring cloud·微服务·架构·全文检索
luck_bor1 小时前
Lambda表达式 算法异常
java·开发语言
lsx2024061 小时前
SOAP Envelope 元素
开发语言
码上小翔哥1 小时前
Jackson 配置深度解析
java·后端
范范@1 小时前
day2-python基础语法
开发语言·python
qq_2518364571 小时前
基于java 私厨美食共享平台系统设计与实现(有源码)
java·开发语言·美食
杜子不疼.1 小时前
【C++ 在线五子棋对战】 - 工具类模块实现
开发语言·c++