沉梦手记 沉梦手记
首页
  • 基础篇
  • 集合篇
  • 并发篇
  • JVM
  • 新特性
  • 计算机网络
  • 操作系统
  • 数据结构与算法
  • 基础篇
  • MySql
  • Redis
  • 达梦数据库
  • Spring
  • SpringBoot
  • Mybatis
  • Shiro
  • 设计须知
  • UML画图
  • 权限校验
  • 设计模式
  • API网关
  • 网络通信
  • 消息队列
  • SpringCloud
  • 分布式事务
  • 云存储
  • 搜索引擎
  • 音视频处理
  • Linux 与容器化运维
  • 开发工具篇
  • 工具库篇
  • 开发技巧篇
  • 工具类系列
  • 随笔
  • 前端环境搭建
  • HTML与CSS
  • JS学习
  • Axios入门
  • Vue Router入门
  • Pinia入门
  • Vue3入门
  • Vue3进阶
  • 黑马Vue3
  • 脚手架搭建
  • 瑞吉外卖
  • 黑马点评
  • vue-blog
  • 沉梦接口开放平台
  • 用户中心
  • 聚合搜索平台
  • 仿12306项目
  • 壁纸小程序项目
  • RuoYi-Vue
  • 博客搭建
  • 网站收藏箱
  • 断墨寻径摘录
  • 费曼学习法
Github (opens new window)

沉梦听雨

时间是最好的浸渍剂,而沉淀是最好的提纯器🚀
首页
  • 基础篇
  • 集合篇
  • 并发篇
  • JVM
  • 新特性
  • 计算机网络
  • 操作系统
  • 数据结构与算法
  • 基础篇
  • MySql
  • Redis
  • 达梦数据库
  • Spring
  • SpringBoot
  • Mybatis
  • Shiro
  • 设计须知
  • UML画图
  • 权限校验
  • 设计模式
  • API网关
  • 网络通信
  • 消息队列
  • SpringCloud
  • 分布式事务
  • 云存储
  • 搜索引擎
  • 音视频处理
  • Linux 与容器化运维
  • 开发工具篇
  • 工具库篇
  • 开发技巧篇
  • 工具类系列
  • 随笔
  • 前端环境搭建
  • HTML与CSS
  • JS学习
  • Axios入门
  • Vue Router入门
  • Pinia入门
  • Vue3入门
  • Vue3进阶
  • 黑马Vue3
  • 脚手架搭建
  • 瑞吉外卖
  • 黑马点评
  • vue-blog
  • 沉梦接口开放平台
  • 用户中心
  • 聚合搜索平台
  • 仿12306项目
  • 壁纸小程序项目
  • RuoYi-Vue
  • 博客搭建
  • 网站收藏箱
  • 断墨寻径摘录
  • 费曼学习法
Github (opens new window)
  • 开发工具篇

    • idea相关

    • 玩转Git

    • Maven相关

      • Maven简介
      • Maven常用命令
      • Maven依赖管理
      • Maven生命周期与插件
      • Maven项目管理工具
        • 分模块开发与设计
          • 工程模块与模块划分
          • 常见的模块划分方式
        • 聚合
          • 作用
          • 制作方式
          • 注意事项
        • 继承
          • 描述
          • 实现
          • 父项目的 pom.xml
          • 子项目的 pom.xml
          • 继承依赖定义
          • 描述
          • 案例展示
        • 属性
          • 自定义属性
          • 作用
          • 定义格式
          • 调用格式
          • 内置属性
          • 作用
          • 常用内置属性
          • Setting 属性
          • 作用
          • 调用格式
          • Java 系统属性
          • 作用
          • 调用格式
          • 系统属性查询方式
          • 环境变量属性
          • 作用
          • 调用格式
          • 环境变量属性查询方式
        • 版本管理
          • 简介
          • 工程版本分类
          • SNAPSHOT(快照版本)
          • RELEASE(发布版本)
        • 资源配置
        • 多环境开发配置
          • 配置方式
          • 加载指定环境
          • 范例
        • 跳过测试
          • 命令行方式
          • 插件配置方式
        • 私服
          • Nexus
          • 仓库分类
          • 访问私服配置
          • 配置 settings.xml 中的服务器认证信息
          • 配置项目访问私服上传资源(pom.xml)
          • 发布资源到私服
        • 阿里云 Maven 镜像
          • 配置方式
      • Maven配置文件详解
    • 前端工具

    • 测试工具

    • AI工具

  • 工具库篇

  • 开发技巧篇

  • 工具类系列

  • 随笔

  • 开发日常
  • 开发工具篇
  • Maven相关
沉梦听雨
2023-10-30
目录

Maven项目管理工具

# Maven 项目管理工具

# 分模块开发与设计

# 工程模块与模块划分

在 Maven 项目中,模块是指将一个大型项目拆分成多个独立的子项目,每个子项目都有自己的 pom.xml 文件。这种模块化的划分可以带来许多好处,包括更好的代码组织、更容易的维护和测试、更好的团队协作等。

# 常见的模块划分方式

  1. 功能划分:根据不同的功能将项目划分为多个模块,例如用户管理模块、订单管理模块、支付模块等。这种划分方式可以使每个模块专注于特定的功能,便于团队成员的协作和独立开发。

  2. 业务领域划分:根据不同的业务领域将项目划分为多个模块,例如电商模块、金融模块、物流模块等。这种划分方式可以使每个模块独立演化,便于团队成员的专注和理解。

  3. 技术层面划分:根据不同的技术层面将项目划分为多个模块,例如前端模块、后端模块、数据库模块等。这种划分方式可以使每个模块专注于特定的技术领域,便于团队成员的专长发挥和独立开发。

在划分模块时,需要考虑模块之间的依赖关系和版本管理。可以使用 Maven 的父子模块关系来管理模块之间的依赖关系,并在父模块的 pom.xml 中定义共享的依赖和插件版本,这样可以确保模块之间的一致性和版本控制。

# 聚合

# 作用

聚合用于快速构建 Maven 工程,一次性构建多个项目/模块。

# 制作方式

  1. 创建一个父模块,打包类型定义为 pom。
  2. 在父模块的 pom.xml 中通过 <modules> 标签定义当前模块进行构建操作时关联的其他模块名称。
<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>parent-project</artifactId>
    <version>1.0.0</version>
    <packaging>pom</packaging>

    <modules>
        <module>child-project1</module>
        <module>child-project2</module>
        <module>child-project3</module>
    </modules>
</project>
1
2
3
4
5
6
7
8
9
10
11
12
13

# 注意事项

参与聚合操作的模块最终执行顺序与模块间的依赖关系有关,与配置顺序无关。Maven 会自动根据依赖关系确定构建顺序。

# 继承

# 描述

在 Maven 中,可以使用继承来实现项目之间的代码和配置的共享。Maven 继承是通过在父项目中定义一组通用的配置和依赖,然后在子项目中继承这些配置和依赖来实现的。

要使用 Maven 继承,需要创建一个父项目(也称为聚合项目)和一个或多个子项目。父项目中定义了一些通用的配置,例如插件版本、依赖管理等。子项目可以继承父项目的配置,并可以添加自己的特定配置。

# 实现

# 父项目的 pom.xml

<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>parent-project</artifactId>
    <version>1.0.0</version>
    <packaging>pom</packaging>

    <modules>
        <module>child-project1</module>
        <module>child-project2</module>
    </modules>
</project>
1
2
3
4
5
6
7
8
9
10
11
12

# 子项目的 pom.xml

<project>
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>com.example</groupId>
        <artifactId>parent-project</artifactId>
        <version>1.0.0</version>
        <relativePath>../parent-project/pom.xml</relativePath>
    </parent>

    <artifactId>child-project1</artifactId>
    <!-- groupId 和 version 可以从父项目继承,无需重复声明 -->
</project>
1
2
3
4
5
6
7
8
9
10
11
12
13

# 继承依赖定义

# 描述

在 Maven 中,可以使用 <dependencyManagement> 来定义依赖关系。通过在父项目的 pom.xml 文件中定义依赖管理,子项目可以继承这些依赖版本,从而实现共享和统一管理。

子项目可以通过在其 pom.xml 文件中使用 <dependencies> 元素来继承父项目的依赖。当子项目中引用一个依赖时,Maven 会首先查找子项目自身的依赖定义,如果找不到,则会继续查找父项目的依赖定义。

这种继承依赖定义的方式可以简化项目的管理,避免重复定义相同的依赖,并确保所有子项目使用相同的依赖版本。同时,通过在父项目中集中管理依赖,可以更方便地进行版本升级和依赖冲突的解决。

# 案例展示

父项目的 pom.xml 中的 <dependencyManagement> 定义:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.example</groupId>
            <artifactId>dependency1</artifactId>
            <version>1.0.0</version>
        </dependency>
        <dependency>
            <groupId>com.example</groupId>
            <artifactId>dependency2</artifactId>
            <version>2.0.0</version>
        </dependency>
    </dependencies>
</dependencyManagement>
1
2
3
4
5
6
7
8
9
10
11
12
13
14

子项目继承父项目的依赖(无需指定版本号):

<dependencies>
    <dependency>
        <groupId>com.example</groupId>
        <artifactId>dependency1</artifactId>
        <!-- 版本号由父 POM 的 dependencyManagement 统一管理 -->
    </dependency>
    <dependency>
        <groupId>com.example</groupId>
        <artifactId>dependency2</artifactId>
    </dependency>
</dependencies>
1
2
3
4
5
6
7
8
9
10
11

# 属性

# 自定义属性

# 作用

等同于定义变量,方便统一维护版本号等配置。

# 定义格式

<properties>
    <spring.version>5.3.29</spring.version>
    <junit.version>4.13.2</junit.version>
</properties>
1
2
3
4

# 调用格式

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>${spring.version}</version>
</dependency>
1
2
3
4
5

# 内置属性

# 作用

使用 Maven 内置属性,快速配置。

# 常用内置属性

属性 说明
${basedir} 项目根目录
${version} 项目版本号
${project.basedir} 项目根目录(推荐写法)
${project.version} 项目版本号(推荐写法)
${project.build.directory} 构建输出目录(即 target)
${project.artifactId} 项目的 artifactId

# Setting 属性

# 作用

使用 Maven 配置文件 settings.xml 中的属性,用于动态配置。

# 调用格式

${settings.localRepository}
1

# Java 系统属性

# 作用

读取 Java 系统属性,用于动态配置。

# 调用格式

${user.home}
1

# 系统属性查询方式

mvn help:system
1

# 环境变量属性

# 作用

使用操作系统环境变量,用于动态配置。

# 调用格式

${env.JAVA_HOME}
1

# 环境变量属性查询方式

mvn help:system
1

# 版本管理

# 简介

Maven 提供了版本管理的功能。在 Maven 中,你可以使用版本号来管理项目的不同版本。Maven 的版本号遵循一定的规则,通常采用以下格式:

主版本号.次版本号.增量版本-里程碑版本
1
版本组成 说明 示例
主版本号 表示项目重大架构的变更 Spring 5 相较于 Spring 4
次版本号 表示有较大的功能增加和变化,或者全面系统地修复漏洞 5.3 → 5.4
增量版本 表示有重大漏洞的修复 5.3.28 → 5.3.29
里程碑版本 表示一个版本内部的里程碑 M1、RC1、GA

例如,1.0.0 是一个常见的版本号格式。在 Maven 中,你可以在项目的 pom.xml 文件中指定版本号,也可以使用属性来定义版本号,以便在构建过程中灵活地修改它。

# 工程版本分类

# SNAPSHOT(快照版本)

项目开发过程中,为了方便团队成员合作,解决模块间相互依赖和及时更新的问题,开发者对每个模块进行构建时输出的临时性版本叫快照版本(测试阶段版本)。

快照版本会随着开发的进展不断更新。

# RELEASE(发布版本)

项目开发到进入阶段里程碑后,向团队外部发布较为稳定的版本,该版本所对应的构建文件是稳定的。即便进行功能的后续开发,也不会改变当前发布版本内容,这种版本称之为发布版本。

# 资源配置

Maven 可以通过 <resources> 标签配置资源文件的处理方式,支持在资源文件中使用 Maven 属性进行变量替换。

<build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
            <includes>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
            </includes>
        </resource>
    </resources>
</build>
1
2
3
4
5
6
7
8
9
10
11
12

<filtering>true</filtering> 表示开启资源过滤,会将资源文件中的 ${...} 占位符替换为 Maven 属性的值。

# 多环境开发配置

# 配置方式

在 pom.xml 中通过 <profiles> 定义多个环境配置:

<profiles>
    <!-- 开发环境 -->
    <profile>
        <id>dev</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
            <profile.name>dev</profile.name>
        </properties>
    </profile>

    <!-- 内网测试环境 -->
    <profile>
        <id>sit</id>
        <properties>
            <profile.name>sit</profile.name>
        </properties>
    </profile>

    <!-- 生产环境 -->
    <profile>
        <id>prod</id>
        <properties>
            <profile.name>prod</profile.name>
        </properties>
    </profile>
</profiles>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

# 加载指定环境

mvn 指令 -P 环境定义id
1

# 范例

# 使用生产环境配置进行构建
mvn install -P prod

# 使用开发环境配置进行构建
mvn install -P dev
1
2
3
4
5

# 跳过测试

# 命令行方式

在 Maven 中,可以使用 -DskipTests 参数来跳过测试阶段:

mvn clean install -DskipTests
1

上述命令将执行 Maven 的 clean 和 install 目标,并跳过测试阶段。这意味着在构建过程中不会执行任何测试。

# 插件配置方式

如果只想跳过特定的测试类或测试方法,可以使用 maven-surefire-plugin 插件的 skip 或 excludes 配:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
                <skip>true</skip>
                <!-- 或者使用以下配置来排除特定的测试类 -->
                <!--
                <excludes>
                    <exclude>com.example.MyTest</exclude>
                </excludes>
                -->
                <!-- 或者使用以下配置来包含特定的测试类 -->
                <!--
                <includes>
                    <include>com.example.MyTest</include>
                </includes>
                -->
            </configuration>
        </plugin>
    </plugins>
</build>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

# 私服

# Nexus

Nexus 是 Sonatype 公司的一款 Maven 私服产品。

下载地址:https://www.sonatype.com/download-oss-sonatype (opens new window)

# 仓库分类

仓库类型 说明
hosted 宿主仓库,存放本地项目产生的构建,团队内部开发的通用组件库、公共 jar 等都发布到这里
proxy 代理仓库,用来代理远程仓库,如代理 Maven 中央仓库等
group 仓库组,可以聚合 hosted 和 proxy 仓库,暴露为一个地址,方便统一访问

# 访问私服配置

# 配置 settings.xml 中的服务器认证信息

<servers>
    <server>
        <id>nexus-releases</id>
        <username>admin</username>
        <password>admin123</password>
    </server>
    <server>
        <id>nexus-snapshots</id>
        <username>admin</username>
        <password>admin123</password>
    </server>
</servers>
1
2
3
4
5
6
7
8
9
10
11
12

# 配置项目访问私服上传资源(pom.xml)

<distributionManagement>
    <repository>
        <id>nexus-releases</id>
        <url>http://localhost:8081/repository/maven-releases/</url>
    </repository>
    <snapshotRepository>
        <id>nexus-snapshots</id>
        <url>http://localhost:8081/repository/maven-snapshots/</url>
    </snapshotRepository>
</distributionManagement>
1
2
3
4
5
6
7
8
9
10

# 发布资源到私服

mvn deploy
1

注意:pom.xml 中 <repository> 的 <id> 必须与 settings.xml 中 <server> 的 <id> 一致,Maven 才能找到对应的认证信息。

# 阿里云 Maven 镜像

地址:阿里云仓库服务 (opens new window)

# 配置方式

在 settings.xml 中添加镜像配置:

<mirrors>
    <mirror>
        <id>aliyunmaven</id>
        <mirrorOf>*</mirrorOf>
        <name>阿里云公共仓库</name>
        <url>https://maven.aliyun.com/repository/public</url>
    </mirror>
</mirrors>
1
2
3
4
5
6
7
8
上次更新: 2026/7/24 16:59:26
Maven生命周期与插件
Maven配置文件详解

← Maven生命周期与插件 Maven配置文件详解→

Theme by Vdoing | Copyright © 2023-2026 沉梦听雨 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式