Maven进阶知识点

一、项目分模块设计

1. 核心定义

将大型项目按功能或技术分层,拆分为多个独立子模块。

2. 设计目的

1.便于项目管理、维护与功能扩展

2.模块间资源共享,代码复用

3.降低代码耦合,提升团队并行开发效率

3. 三种拆分策略

拆分策略 说明 示例
按功能模块拆分 按业务领域划分,一个模块对应一条业务线 mall-goods、mall-cart、mall-order
按技术分层拆分 按架构分层划分,全业务共用一套分层 mall-pojo、mall-service、mall-mapper
功能+分层组合拆分 前两种结合,业务线内部再做技术分层 mall-goods-service、mall-order-controller

4. 开发规范

1.先完成模块规划,再编码,禁止后期强行拆分

2.模块依赖保持单向,杜绝循环依赖

3.通用工具类、常量、异常统一放入 common 公共模块

二、Maven 继承关系

1. 核心概念

父工程与子工程的继承体系,子工程可复用父工程所有配置,主要用于统一管理依赖。

核心作用
  • 简化依赖配置,避免重复编写
  • 统一版本,解决版本冲突
  • 集中管控依赖,升级仅需修改父工程

2. Maven 打包方式

打包方式 适用场景
jar 普通业务模块、SpringBoot 项目(内嵌Tomcat可独立运行)
war 传统Web项目,需部署至外部Tomcat
pom 父工程/聚合工程,仅管理配置,不编写业务代码

3. 继承实现步骤 & 配置示例

1.父工程:打包方式设为 pom,可继承 SpringBoot 官方父工程

2.子工程:通过 <parent> 标签指定父工程,自动继承配置

父工程 pom.xml

xml 复制代码
<!-- 继承SpringBoot官方父工程 -->
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>3.2.10</version>
    <relativePath/>
</parent>

<groupId>com.itheima</groupId>
<artifactId>tlias-parent</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>

子工程 pom.xml

xml 复制代码
<parent>
    <groupId>com.itheima</groupId>
    <artifactId>tlias-parent</artifactId>
    <version>1.0-SNAPSHOT</version>
    <relativePath>../tlias-parent/pom.xml</relativePath>
</parent>

4. 关键规则

1.relativePath:指定父工程 pom 相对路径,不配置则从仓库查找

2.版本优先级:子工程依赖版本 > 父工程版本

3.继承范围:依赖、插件、属性等配置全部自动继承

三、Maven 版本锁定

1. 核心概念

通过 <dependencyManagement> 在父工程统一锁定依赖版本,是多模块项目标准用法。

核心作用
  • 全局管控版本,彻底解决版本冲突
  • 子工程引入依赖无需指定版本
  • 版本升级只改父工程一处,维护简单

2. 标签区别

标签 作用 继承规则
直接声明依赖 子工程自动继承所有依赖
仅锁定依赖版本 不自动引入依赖,子工程按需引入、免写版本

3. 版本属性统一管理

借助 <properties> 定义版本常量,集中维护版本号。

父工程配置

xml 复制代码
<properties>
    <lombok.version>1.18.30</lombok.version>
    <jjwt.version>0.9.1</jjwt.version>
</properties>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt</artifactId>
            <version>${jjwt.version}</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>${lombok.version}</version>
        </dependency>
    </dependencies>
</dependencyManagement>

子工程配置(无需指定版本)

xml 复制代码
<dependencies>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    </dependency>
</dependencies>

4. 最佳实践

1.父工程用 dependencyManagement 锁定所有公共依赖版本

2.所有版本号统一抽离到 properties 标签

3.SpringBoot、MyBatis 等框架优先使用官方父工程版本

4.子工程可自行指定版本,优先级高于父工程

四、Maven 聚合关系

1. 核心概念

聚合工程用于整合所有子模块,实现一键全项目构建。

  • 聚合工程:打包方式为 pom,无业务代码,仅管理模块
  • 作用:自动按依赖顺序构建所有子模块,无需逐个手动执行

配置示例(聚合工程 pom.xml)

xml 复制代码
<modules>
    <module>../tlias-pojo</module>
    <module>../tlias-utils</module>
    <module>../tlias-web-management</module>
</modules>

规则:构建顺序由模块依赖关系决定,与 <module> 书写顺序无关。

2. 继承与聚合 联系 & 区别

联系

1.两类工程打包方式均为 pom

2.实际开发中通常合并为同一个父工程,同时实现继承+聚合

区别
维度 继承关系 聚合关系
核心目的 统一管理依赖、版本、插件 多模块一键整体构建
配置位置 子工程 pom.xml 配置 <parent> 父/聚合工程 pom.xml 配置 <modules>
作用范围 单个子工程 整个项目所有模块

五、Maven 私服

1. 核心概念

私服是企业局域网内的远程仓库,用于代理中央仓库、实现团队内部资源共享。

依赖查找顺序:本地仓库 → 私服 → 中央仓库

2. 仓库分类

仓库类型 版本标识 说明
release 仓库 RELEASE 正式发行版,版本稳定
snapshot 仓库 SNAPSHOT 开发快照版,版本不稳定
central 仓库 - 代理外网中央仓库的第三方依赖

3. 核心配置

(1)配置私服账号(settings.xml)

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>
</servers>

(2)配置项目上传地址(项目 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>

(3)配置私服镜像(settings.xml)

xml 复制代码
<mirrors>
    <mirror>
        <id>maven-public</id>
        <mirrorOf>*</mirrorOf>
        <url>http://192.168.150.101:8081/repository/maven-public/</url>
    </mirror>
</mirrors>

4. 核心操作

1.上传资源:执行 mvn deploy,自动根据版本类型上传至对应仓库

2.下载依赖:项目引入依赖时,优先从私服拉取资源

相关推荐
布朗克1681 小时前
11 面向对象思想入门
java·对象
拽着尾巴的鱼儿1 小时前
lombok.RequiredArgsConstructor bean 注入
java·lombok
铁链鞭策大师1 小时前
JavaEE之多线程
java·开发语言·java-ee
摇滚侠1 小时前
Maven 入门+高深 jar 包冲突 167-171
java·maven·jar
我是唐青枫1 小时前
Java Optional 实战指南:优雅处理空值与链式转换
java·开发语言
摇滚侠1 小时前
SpringBoot 升级,依赖冲突如何解决
java·spring boot·spring
jack@london1 小时前
eclipse启动tomcat6时报错OutOfMemoryError: PermGen space
java·ide·eclipse
小江的记录本1 小时前
【JVM虚拟机】类加载机制:类加载器、双亲委派模型、好处、破坏双亲委派的场景(附《思维导图》+《面试高频考点清单》)
java·jvm·spring boot·后端·python·spring·面试
李少兄1 小时前
Spring 对象创建范式:依赖注入与直接实例化的边界抉择
java·后端·spring