【学习总结|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命令进行资源上传。

相关推荐
橘子遇见BUG13 分钟前
Unity Shader学习日记 part5 CG基础
学习·unity·游戏引擎·图形渲染
mumu2lili28 分钟前
k8s namespace绑定节点
java·容器·kubernetes
mikey棒棒棒30 分钟前
基于Redis实现短信验证码登录
java·开发语言·数据库·redis·session
Wanna71541 分钟前
后端开发基础——JavaWeb(Servlet)
java·后端·servlet·tomcat
生产队队长42 分钟前
项目练习:若依后台管理系统-后端服务开发步骤(springboot单节点版本)
java·spring boot·后端
m0_7482368343 分钟前
【wiki知识库】08.添加用户登录功能--后端SpringBoot部分
java·spring boot·后端
nbsaas-boot44 分钟前
Java 在包管理与模块化中的优势:与其他开发语言的比较
java·开发语言
沉默的煎蛋1 小时前
前后端交互过程
java·开发语言·ide·vscode·eclipse·状态模式·交互
Wanna7151 小时前
后端开发基础——JavaWeb(根基,了解原理)浓缩
java·后端·servlet·tomcat
Joeysoda1 小时前
Java数据结构 (链表反转(LinkedList----Leetcode206))
java·linux·开发语言·数据结构·链表·1024程序员节