在 Web 后端开发中,Maven 作为强大的项目管理工具,其高级特性对于优化项目结构、提高开发效率至关重要。本文将结合实际代码示例,深入介绍 Maven 的分模块设计与开发、继承与聚合以及私服相关知识。
一、分模块设计与开发
(一)为什么要分模块设计
将项目按功能拆分为多个子模块,能极大提升项目的可维护性、扩展性,方便模块间调用与资源共享。以电商项目为例,若将商品、搜索、购物车、订单等功能混在一个模块,代码会变得臃肿,维护困难,复用性也差。
(二)分模块设计策略
- 按功能模块拆分:划分出公共组件、商品模块、搜索模块等。如在电商项目中,
mall-common
作为公共组件模块,mall-goods
负责商品相关功能。 - 按层拆分:分为公共组件、实体类、控制层、业务层、数据访问层等,像
mall-controller
为控制层模块,mall-mapper
用于数据访问。 - 按功能模块 + 层拆分:结合上述两种方式,如
mall-goods-controller
负责商品模块的控制层逻辑。
(三)分模块开发实战
以tlias
项目为例,创建maven
模块:
- 创建
tlias-pojo
模块:用于存放实体类。在src/main/java
目录下创建实体类,如User.java
:
public class User {private Long id;private String username;private String password;// 省略getter和setter方法
}
- 创建
tlias-utils
模块:存放工具类。例如创建一个日期工具类DateUtil.java
:
import java.text.SimpleDateFormat;
import java.util.Date;public class DateUtil {public static String formatDate(Date date) {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");return sdf.format(date);}
}
开发时需先进行模块功能设计,再编码,避免先开发完整工程再拆分。
二、继承与聚合
(一)继承
- 概念与作用:Maven 中的继承类似 Java 继承,子工程可继承父工程配置,主要用于简化依赖配置和统一管理依赖。
- 实现步骤
- 创建父工程
tlias-parent
:设置打包方式为pom
,并继承spring-boot-starter-parent
。pom.xml
配置如下:
- 创建父工程
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.1.3</version><relativePath/>
</parent>
<groupId>com.itheima</groupId>
<artifactId>tlias-parent</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
- 配置子工程继承关系:在子工程(如
tlias-pojo
)的pom.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-pojo</artifactId>
<version>1.0-SNAPSHOT</version>
- 在父工程配置共有依赖:比如添加
lombok
依赖:
<dependencies><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.34</version></dependency>
</dependencies>
子工程会自动继承该依赖。若父子工程依赖版本冲突,以子工程为准。
(二)版本锁定
在父工程的pom.xml
中使用<dependencyManagement>
统一管理依赖版本。例如管理JWT
令牌版本:
<dependencyManagement><dependencies><!--JWT令牌--><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.9.1</version></dependency></dependencies>
</dependencyManagement>
子工程引入依赖时无需指定版本号:
<dependencies><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId></dependency>
</dependencies>
还可通过自定义属性进一步管理版本,如:
<properties><lombok.version>1.18.30</lombok.version><jjwt.version>0.9.1</jjwt.version>
</properties>
<dependencies><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>${lombok.version}</version></dependency>
</dependencies>
<dependencyManagement><dependencies><!--JWT令牌--><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>${jjwt.version}</version></dependency></dependencies>
</dependencyManagement>
(三)聚合
- 概念与作用:聚合是将多个模块组织成整体,同时构建项目。聚合工程是无业务功能的 “空” 工程,仅含
pom
文件,可快速构建项目。 - 实现方式:在父工程(聚合工程)的
pom.xml
中使用<modules>
配置子模块:
<modules><module>../tlias-pojo</module><module>../tlias-utils</module><module>../tlias-web-management</module>
</modules>
构建时,模块会按依赖关系自动排序,与配置顺序无关。
三、私服
(一)私服介绍
私服是架设在局域网内的仓库服务,代理中央仓库,解决团队内部资源共享与同步问题。依赖查找顺序为:本地仓库 -> 私服 -> 中央仓库。在企业开发中,通常一个项目或公司只需一台私服。
(二)资源上传与下载
- 设置访问用户名 / 密码:在
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>
- 配置上传地址:在 IDEA 的
maven
工程pom.xml
中添加:
<distributionManagement><repository><id>maven-releases</id><url>http://192.168.150.101:8081/repository/maven-releases/</url></repository><snapshotRepository><id>maven-snapshots</id><url>http://192.168.150.101:8081/repository/maven-snapshots/</url></snapshotRepository>
</distributionManagement>
- 设置依赖下载仓库组地址:在
settings.xml
的<mirrors>
和<profiles>
中配置:
<mirror><id>maven-public</id><mirrorOf>*</mirrorOf><url>http://192.168.150.101:8081/repository/maven-public/</url>
</mirror>
<profile><id>allow-snapshots</id><activation><activeByDefault>true</activeByDefault></activation><repositories><repository><id>maven-public</id><url>http://192.168.150.101:8081/repository/maven-public/</url><releases><enabled>true</enabled></releases><snapshots><enabled>true</enabled></snapshots></repository></repositories>
</profile>
项目版本分为RELEASE
(发行版本,存于RELEASE
仓库)和SNAPSHOT
(快照版本,存于SNAPSHOT
仓库),可通过install
和deploy
命令进行资源上传。