一、分模块设计与开发
为什么?将一个大项目拆分成若干个子模块,方便项目的管理维护、扩展,也方便模块间的相互引用,资源共享。
策略一:按照功能模块拆分,比如:公共组件、商品模块、搜索模块、购物车模块、订单模块等。
策略二:按层拆分,比如:公共组件、实体类、控制层、业务层、数据访问层。
策略三:按照功能模块+层拆分。

1、实战

创建新工程,web-ai-project03
配置SDK,检查Maven目录
将tlias-web-management项目复制到该模块下,项目结构导入pom.xml
创建新模块

在模块中将pojo包下的所有文件复制过来src下路径要保持一致
将lombok和org.springframework.boot依赖加入
将tlias项目的pojo包删掉
导入tlias-pojo的包后即可使用
XML
<dependency>
<groupId>com.itheima</groupId>
<artifactId>tlias-pojo</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
创建tlias-utils模块,同上
根据依赖传递,可以直接把依赖剪切过去
3、小结
1.什么是分模块设计?
将项目按照功能模块/层拆分成若干个子模块
2.为什么要分模块设计?
方便项目的管理维护、扩展,也方便模块间的相互引用,资源共享
3.注意事项
分模块设计需要先针对模块功能进行设计,再进行编码。不会先将工程开发完毕,然后进行拆分
二、继承
1、继承关系
(1)介绍
概念:继承描述的是两个工程间的关系 ,与java中的继承相似,子工程可以继承父工程中的配置信息 ,常见于依赖关系的继承。
作用:简化依赖配置、统一管理依赖
实现:
XML
<parent>...</parent>
(2)实现
创建maven模块tlias-parent,该工程为父工程,设置打包方式pom(默认jar)。
在子工程的pom.xml文件中,配置继承关系。
在父工程中配置各个工程共有的依赖(子工程会自动继承父工程的依赖)。
打包方式:
-
jar:普通模块打包,springboot项目基本都是jar包(内嵌tomcat运行)
-
war:普通web程序打包,需要部署在外部的tomcat服务器中运行
-
pom:父工程或聚合工程,该模块不写代码,仅进行依赖管理
a、创建父工程
创建模块tlias-parent
只留一个pom.xml文件即可
XML
<parent>
<!-- 坐标信息-->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.2.10</version>
<!-- 父工程的pom.xml的相对路径-->
<!-- 未指定会在本地仓库查找该依赖,没有就在中央仓库查找该依赖-->
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.itheima</groupId>
<artifactId>tlias-parent</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
b、配置继承关系
tlias-pojo、tlias-utils、tlias-web-management中
父工程和子工程的groupId相同,子工程可以省略
XML
<!-- 父工程-->
<parent>
<groupId>com.itheima</groupId>
<artifactId>tlias-parent</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath>../tlias-parent/pom.xml</relativePath>
</parent>
<!--<groupId>com.itheima</groupId>-->
<artifactId>tlias-utils</artifactId>
<version>1.0-SNAPSHOT</version>
c、父工程配置共有依赖
加入dependency即可
子工程可以删除
2、版本锁定
在maven中,可以在父工程的pom文件中通过<dependencyManagement>来统一管理依赖版本。

(1)统一管理版本
XML
<!-- 统一管理依赖的版本 -->
<dependencyManagement>
<dependencies>
<!--阿里云OSS依赖-->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.17.4</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>
子工程的版本直接删掉即可
(2)自定义属性/引用属性
XML
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!--自定义属性-->
<lombok.version>1.18.34</lombok.version>
<spring.boot.starter.version>3.2.10</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>
引用版本
XML
<version>${spring.boot.starter.version}</version>
三、聚合
主项目在生命周期的打包操作时,需要将其他项模块进行生命周期的install,安装到本地目录
聚合:将多个模块组织成一个整体,同时进行项目的构建。
聚合工程和父工程是一个工程
聚合工程:一个不具有业务功能的"空"工程(有且仅有一个pom文件)
作用:快速构建项目(无需根据依赖关系手动构建,直接在聚合工程上构建即可)
实现:maven中可以通过<modules>设置当前聚合工程所包含的子模块名称

XML
<!--聚合哪些模块-->
<modules>
<module>../tlias-pojo</module>
<module>../tlias-utils</module>
<module>../tlias-web-management</module>
</modules>
只需要点父工程生命周期的package打包即可
1.maven中如何实现聚合关系?
XML
<modules>...</modules>
2.maven中继承与聚合的联系与区别?
联系:继承与聚合都属于设计型模块 ,打包方式都为pom,常将两种关系制作到同一个pom文件中
区别:
-
1.继承用于简化依赖配置 、统一管理依赖版本 ,是在子工程中配置继承关系
-
2.聚合用于快速构建项目 ,是在**父工程(聚合工程)**中配置聚合的模块
四、私服
1、介绍
私服是一种特殊的远程仓库,它是架设在局域网内的仓库服务,用来代理位于外部的中央仓库,用于解决团队内部的资源共享与资源同步问题。
依赖查找顺序:
本地仓库
私服
中央仓库
注意:私服在企业项目开发中,一个项目/公司,只需要一台即可(无需我们自已搭建,会使用即可)。

2、资源上传与下载

项目版本:
central:中央仓库
RELEASE(发行版本):功能趋于稳定、当前更新停止,可以用于发行的版本,存储在私服中的RELEASE仓库中。
SNAPSHOT(快照版本):功能不稳定、尚处于开发中的版本,即快照版本,存储在私服的SNAPSHOT仓库中。
找到该文件双击启动私服"D:\install\installpath\nexus\nexus-3.75.1-01\bin\start.bat"
出现Started Sonatype Nexus OSS 3.75.1-01代表启动成功
访问localhost:8081
配置Maven的私服属性
找到路径"D:\install\envresoce\apache-maven-3.9.4\conf\settings.xml"
配置releases仓库和snapshots仓库的用户名和密码
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>
</servers>
配置私服地址
XML
<mirrors>
<mirror>
<id>maven-public</id>
<mirrorOf>*</mirrorOf>
<url>http://localhost:8081/repository/maven-public</url>
</mirror>
</mirrors>
启用快照版本和发行版本访问
XML
<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>
</profiles>
在父工程的pom.xml的结尾,配置版本的上传地址
XML
<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>
若pom文件中版本不带snapshots,就代表是release版本
在其他工程中,直接会在本地仓库查找,接着就去私服查找了
XML
<dependency>
<groupId>com.itheima</groupId>
<artifactId>tlias-utils</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
私服用完要把setting.xml里加的注释掉,不然要一直开着这个私服
五、Web开发-总结

Spring MVC是Spring Framework的一部分。是Spring对于web框架开发的支持