Bootstrap

【学习总结|DAY034】Maven高级

在 Web 后端开发中,Maven 作为强大的项目管理工具,其高级特性对于优化项目结构、提高开发效率至关重要。本文将结合实际代码示例,深入介绍 Maven 的分模块设计与开发、继承与聚合以及私服相关知识。

一、分模块设计与开发

(一)为什么要分模块设计

将项目按功能拆分为多个子模块,能极大提升项目的可维护性、扩展性,方便模块间调用与资源共享。以电商项目为例,若将商品、搜索、购物车、订单等功能混在一个模块,代码会变得臃肿,维护困难,复用性也差。

(二)分模块设计策略

  1. 按功能模块拆分:划分出公共组件、商品模块、搜索模块等。如在电商项目中,mall-common作为公共组件模块,mall-goods负责商品相关功能。
  2. 按层拆分:分为公共组件、实体类、控制层、业务层、数据访问层等,像mall-controller为控制层模块,mall-mapper用于数据访问。
  3. 按功能模块 + 层拆分:结合上述两种方式,如mall-goods-controller负责商品模块的控制层逻辑。

(三)分模块开发实战

tlias项目为例,创建maven模块:

  1. 创建tlias-pojo模块:用于存放实体类。在src/main/java目录下创建实体类,如User.java
public class User {
    private Long id;
    private String username;
    private String password;
    // 省略getter和setter方法
}

  1. 创建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);
    }
}

开发时需先进行模块功能设计,再编码,避免先开发完整工程再拆分。

二、继承与聚合

(一)继承

  1. 概念与作用:Maven 中的继承类似 Java 继承,子工程可继承父工程配置,主要用于简化依赖配置和统一管理依赖。
  2. 实现步骤
    • 创建父工程tlias-parent:设置打包方式为pom,并继承spring-boot-starter-parentpom.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>

(三)聚合

  1. 概念与作用:聚合是将多个模块组织成整体,同时构建项目。聚合工程是无业务功能的 “空” 工程,仅含pom文件,可快速构建项目。
  2. 实现方式:在父工程(聚合工程)的pom.xml中使用<modules>配置子模块:
<modules>
    <module>../tlias-pojo</module>
    <module>../tlias-utils</module>
    <module>../tlias-web-management</module>
</modules>

构建时,模块会按依赖关系自动排序,与配置顺序无关。

三、私服

(一)私服介绍

私服是架设在局域网内的仓库服务,代理中央仓库,解决团队内部资源共享与同步问题。依赖查找顺序为:本地仓库 -> 私服 -> 中央仓库。在企业开发中,通常一个项目或公司只需一台私服。

(二)资源上传与下载

  1. 设置访问用户名 / 密码:在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>

  1. 配置上传地址:在 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>

  1. 设置依赖下载仓库组地址:在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仓库),可通过installdeploy命令进行资源上传。

;