【学习总结|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
java 复制代码
public class User {
    private Long id;
    private String username;
    private String password;
    // 省略getter和setter方法
}
  1. 创建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);
    }
}

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

二、继承与聚合

(一)继承

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

(三)聚合

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

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

三、私服

(一)私服介绍

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

(二)资源上传与下载

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

相关推荐
字节源流2 小时前
关于maven的依赖下不下来的问题
java·maven
pjx9873 小时前
服务间的“握手”:OpenFeign声明式调用与客户端负载均衡
java·运维·spring·负载均衡
prinrf('千寻)3 小时前
MyBatis-Plus 的 updateById 方法不更新 null 值属性的问题
java·开发语言·mybatis
985小水博一枚呀3 小时前
【AI大模型学习路线】第二阶段之RAG基础与架构——第七章(【项目实战】基于RAG的PDF文档助手)技术方案与架构设计?
人工智能·学习·语言模型·架构·大模型
老华带你飞4 小时前
实习记录小程序|基于SSM+Vue的实习记录小程序设计与实现(源码+数据库+文档)
java·数据库·spring boot·小程序·论文·毕设·实习记录小程序
在未来等你4 小时前
互联网大厂Java求职面试:AI与大模型应用集成及云原生挑战
java·微服务·ai·kubernetes·大模型·embedding·spring ai
源码技术栈4 小时前
SaaS基于云计算、大数据的Java云HIS平台信息化系统源码
java·大数据·云计算·云his·his系统·云医院·区域his
编程、小哥哥4 小时前
互联网大厂Java面试:从Spring Boot到微服务架构的技术深挖
java·spring boot·redis·微服务·prometheus·面试技巧
揽你·入怀5 小时前
数据结构:ArrayList简单实现与常见操作实例详解
java·开发语言
okok__TXF5 小时前
SpringBoot3+AI
java·人工智能·spring