⭐⭐⭐ Spring Boot 项目实战 ⭐⭐⭐ Spring Cloud 项目实战
《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

摘要: 原创出处 blog.csdn.net/zeijiershuai 「null」欢迎转载,保留摘要,谢谢!


🙂🙂🙂关注微信公众号:【芋道源码】有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言都将得到认真回复。甚至不知道如何读源码也可以请教噢。
  4. 新的源码解析文章实时收到通知。每周更新一篇左右。
  5. 认真的源码交流微信群。

一. 分模块设计与开发

1.将一个大项目拆分成若干个子模块、方便项目的管理维护、扩展,也方便模块之间的相互引用,资源共享

2.分模块设计 - 策略

  • 按照功能模块拆分,如:公共组件、商品模块、购物车模块等等
  • 按层拆分,如公共组件、实体类、控制层、业务层等等
  • 按照功能模块+层拆分

二. 继承与聚合

1. 继承

1)继承描述的两个工程间的关系,与java中的继承相似,子工程可以继承父工程中的配置信息,常见与依赖关系的继承,支持单继承,不支持多继承

2)作用:简化依赖配置、统一管理依赖

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

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

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

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

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

父工程pom.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<!-- 父工程继承 spring-boot 的父工程 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.4.6</version>
<!-- 父工程的pom.xml文件相对路径 不指定默认从本地仓库或远程仓库查找-->
<relativePath/><!-- lookup parent from repository -->
</parent>

<groupId>com.wyyzs</groupId>
<artifactId>tilas-parent</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>

<properties>
<maven.compiler.source>21</maven.compiler.source>
<maven.compiler.target>21</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<!-- 在父工程中配置各个工程共有的依赖(子工程会自动继承父工程的依赖) -->
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.38</version>
<optional>true</optional>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>3.4.6</version>
</dependency>
</dependencies>

</project>

4)注意:

① 在子工程中,配置了继承关系之后,坐标中的groupId是可以省略的,会从自动继承父工程的

② relativePath指定父工程的pom文件的相对位置(如果不指定,将从本地仓库/远程仓库查找)

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

5)版本锁定

如果在少数子工程中使用了相同的依赖,如何统一管理各个依赖的版本?

① 在maven中,可以在父工程的pom文件中通过<dependencyManagement>来统一管理依赖版本,子工程用时仍需引入依赖,但不需要指定依赖版本

6)自定义属性/引用属性

如果父工程中统一管理的依赖较多,修改某一个依赖的版本寻找起来不方便,可以使用自定义属性

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<!-- 父工程继承 spring-boot 的父工程 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.4.6</version>
<!-- 父工程的pom.xml文件相对路径 不指定默认从本地仓库或远程仓库查找-->
<relativePath/><!-- lookup parent from repository -->
</parent>

<groupId>com.wyyzs</groupId>
<artifactId>tilas-parent</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>

<properties>
<maven.compiler.source>21</maven.compiler.source>
<maven.compiler.target>21</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>


<!-- 自定义属性 -->
<lombok.version>1.18.38</lombok.version>
<spring.boot.starter.version>3.4.6</spring.boot.starter.version>
<aliyun.sdk.version>3.17.4</aliyun.sdk.version>
<jaxb.api.version>2.3.1</jaxb.api.version>
<activation.version>1.1.1</activation.version>
<jaxb.runtime>2.3.3</jaxb.runtime>
<jjwt.version>0.9.1</jjwt.version>
</properties>

<!-- 在父工程中配置各个工程共有的依赖(子工程会自动继承父工程的依赖) -->
<!-- dependencies 直接引入依赖 -->
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
<optional>true</optional>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>${spring.boot.starter.version}</version>
</dependency>
</dependencies>

<!-- dependencyManagement 统一管理依赖的版本 -->
<dependencyManagement>
<dependencies>
<!-- 阿里云 依赖 -->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>${aliyun.sdk.version}</version>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>${jaxb.api.version}</version>
</dependency>
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>${activation.version}</version>
</dependency>
<!-- no more than 2.3.3-->
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>${jaxb.runtime}</version>
</dependency>

<!-- jwt令牌 -->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>${jjwt.version}</version>
</dependency>
</dependencies>
</dependencyManagement>

</project>

7)<dependencyManagement> 与 <dependencies> 的区别:

① <dependencies>是直接引入依赖,在父工程中配置了依赖,子工程会直接继承

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

2. 聚合

项目分模块后,进行打包操作时,需要根据其依赖关系将其引用的模块逐一手动insert到本地仓库,比较繁琐

  • 聚合: 将多个模块组织成一个整体,同时进行项目的构建
  • 聚合工程: 一个不具有业务功能的“空工程”(有且仅有一个pom文件)(父工程)
  • 作用: 快速构建项目(无需根据依赖关系手动构建,直接在聚合工程上构建即可)
  • 实现: maven中可以通过<modules>设置当前聚合工程所包含的子模块名称

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

3.继承与聚合

1)联系:继承与聚合都属于设计型模块,打包方式都为pom。常将两种关系制作到同一个pom文件中

2)区别:

① 继承用于简化依赖配置,统一管理依赖版,是在子工程中配置继承关系

② 聚合用于快速构建项目,是在父工程(聚合工程)中配置聚合的模块

三. 私服

1. 介绍

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

2)依赖查找顺序:本地仓库 -> 私服 -> 中央仓库

2. 资源上传与下载

1)项目版本:

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

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

2)上传与下载步骤

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

② 设置私服依赖下载的仓库地址(settings.xml的mirrors、profiles中配置)-(自己maven安装目录下config/settings.xml中的mirrors和profiles中配置)

私服默认情况下只允许访问snapshots版本,如果要访问releases版本的依赖,需加入profiles配置

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

文章目录
  1. 1. 一. 分模块设计与开发
  2. 2. 二. 继承与聚合
    1. 2.1. 1. 继承
    2. 2.2. 2. 聚合
    3. 2.3. 3.继承与聚合
  3. 3. 三. 私服
    1. 3.1. 1. 介绍
    2. 3.2. 2. 资源上传与下载