在 Web 后端开发中,Maven 作为强大的项目管理工具,其高级特性对于优化项目结构、提高开发效率至关重要。本文将结合实际代码示例,深入介绍 Maven 的分模块设计与开发、继承与聚合以及私服相关知识。
一、分模块设计与开发
(一)为什么要分模块设计
将项目按功能拆分为多个子模块,能极大提升项目的可维护性、扩展性,方便模块间调用与资源共享。以电商项目为例,若将商品、搜索、购物车、订单等功能混在一个模块,代码会变得臃肿,维护困难,复用性也差。
(二)分模块设计策略
- 按功能模块拆分 :划分出公共组件、商品模块、搜索模块等。如在电商项目中,
mall-common
作为公共组件模块,mall-goods
负责商品相关功能。 - 按层拆分 :分为公共组件、实体类、控制层、业务层、数据访问层等,像
mall-controller
为控制层模块,mall-mapper
用于数据访问。 - 按功能模块 + 层拆分 :结合上述两种方式,如
mall-goods-controller
负责商品模块的控制层逻辑。
(三)分模块开发实战
以tlias
项目为例,创建maven
模块:
- 创建
tlias-pojo
模块 :用于存放实体类。在src/main/java
目录下创建实体类,如User.java
:
java
public class User {
private Long id;
private String username;
private String password;
// 省略getter和setter方法
}
- 创建
tlias-utils
模块 :存放工具类。例如创建一个日期工具类DateUtil.java
:
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
配置如下:
- 创建父工程
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
中添加:
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
依赖:
XML
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.34</version>
</dependency>
</dependencies>
子工程会自动继承该依赖。若父子工程依赖版本冲突,以子工程为准。
(二)版本锁定
在父工程的pom.xml
中使用<dependencyManagement>
统一管理依赖版本。例如管理JWT
令牌版本:
XML
<dependencyManagement>
<dependencies>
<!--JWT令牌-->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
</dependencies>
</dependencyManagement>
子工程引入依赖时无需指定版本号:
XML
<dependencies>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
</dependency>
</dependencies>
还可通过自定义属性进一步管理版本,如:
XML
<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>
配置子模块:
XML
<modules>
<module>../tlias-pojo</module>
<module>../tlias-utils</module>
<module>../tlias-web-management</module>
</modules>
构建时,模块会按依赖关系自动排序,与配置顺序无关。
三、私服
(一)私服介绍
私服是架设在局域网内的仓库服务,代理中央仓库,解决团队内部资源共享与同步问题。依赖查找顺序为:本地仓库 -> 私服 -> 中央仓库。在企业开发中,通常一个项目或公司只需一台私服。
(二)资源上传与下载
- 设置访问用户名 / 密码 :在
settings.xml
的<servers>
中配置:
XML
<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
中添加:
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>
中配置:
XML
<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
命令进行资源上传。