从 01 开始 从 01 开始
首页
  • 📚 计算机基础

    • 计算机简史
    • 数字电路
    • 计算机组成原理
    • 操作系统
    • Linux
    • 计算机网络
    • 数据库
    • 编程工具
    • 装机
  • 🎨 前端

    • Node
  • JavaSE
  • Java 高级
  • JavaEE

    • 构建、依赖管理
    • Ant
    • Maven
    • 日志框架
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • 环境管理和配置管理-科普篇
    • Servlet
  • Spring

    • Spring基础
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC

    • SpringMVC 基础
  • SpringBoot

    • SpringBoot 基础
  • Windows 使用技巧
  • 手机
  • 最全面的输入法教程
  • 最全面的浏览器教程
  • Office
  • 图片类工具
  • 效率类工具
  • RSS
  • 码字工具
  • 各大平台
  • 校招
  • 五险一金等
  • 职场规划
  • 关于离职
  • 杂谈
  • 📖 读书

    • 读书工具
    • 读书笔记
  • 🌍 英语

    • 从零开始学英语
    • 英语兔的相关视频
    • Larry 想做技术大佬的相关视频
  • 🏛️ 政治

    • 反腐
    • GFW
    • 404 内容
    • 审查与自我审查
    • 互联网
    • 战争
  • 💰 经济

    • 关于税
    • 理财
  • 💪 健身

    • 睡眠
    • 皮肤
    • 口腔健康
    • 学会呼吸
    • 健身日志
  • 🏠 其他

    • 驾驶技能
    • 租房与买房
    • 厨艺
  • 电影

    • 电影推荐
  • 电视剧
  • 漫画

    • 漫画软件
    • 漫画推荐
  • 游戏

    • Steam
    • 三国杀
    • 求生之路
  • 小说
  • 关于本站
  • 关于博主
  • 打赏
  • 网站动态
  • 友人帐
  • 从零开始搭建博客
  • 搭建邮件服务器
  • 本站分享
  • 🌈 生活

    • 2022
    • 2023
    • 2024
    • 2025
  • 📇 文章索引

    • 文章分类
    • 文章归档

晓林

程序猿,自由职业者,博主,英语爱好者,健身达人
首页
  • 📚 计算机基础

    • 计算机简史
    • 数字电路
    • 计算机组成原理
    • 操作系统
    • Linux
    • 计算机网络
    • 数据库
    • 编程工具
    • 装机
  • 🎨 前端

    • Node
  • JavaSE
  • Java 高级
  • JavaEE

    • 构建、依赖管理
    • Ant
    • Maven
    • 日志框架
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • 环境管理和配置管理-科普篇
    • Servlet
  • Spring

    • Spring基础
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC

    • SpringMVC 基础
  • SpringBoot

    • SpringBoot 基础
  • Windows 使用技巧
  • 手机
  • 最全面的输入法教程
  • 最全面的浏览器教程
  • Office
  • 图片类工具
  • 效率类工具
  • RSS
  • 码字工具
  • 各大平台
  • 校招
  • 五险一金等
  • 职场规划
  • 关于离职
  • 杂谈
  • 📖 读书

    • 读书工具
    • 读书笔记
  • 🌍 英语

    • 从零开始学英语
    • 英语兔的相关视频
    • Larry 想做技术大佬的相关视频
  • 🏛️ 政治

    • 反腐
    • GFW
    • 404 内容
    • 审查与自我审查
    • 互联网
    • 战争
  • 💰 经济

    • 关于税
    • 理财
  • 💪 健身

    • 睡眠
    • 皮肤
    • 口腔健康
    • 学会呼吸
    • 健身日志
  • 🏠 其他

    • 驾驶技能
    • 租房与买房
    • 厨艺
  • 电影

    • 电影推荐
  • 电视剧
  • 漫画

    • 漫画软件
    • 漫画推荐
  • 游戏

    • Steam
    • 三国杀
    • 求生之路
  • 小说
  • 关于本站
  • 关于博主
  • 打赏
  • 网站动态
  • 友人帐
  • 从零开始搭建博客
  • 搭建邮件服务器
  • 本站分享
  • 🌈 生活

    • 2022
    • 2023
    • 2024
    • 2025
  • 📇 文章索引

    • 文章分类
    • 文章归档
  • JavaSE

  • JavaSenior

  • JavaEE

    • JavaEE概念

    • Ant

    • Maven

      • 什么是 Maven
      • 安装Maven
      • 第一个 Maven 项目
      • Maven 的组成和配置
      • 快速创建 Maven 项目
      • 创建 Web 项目
      • Maven 的生命周期和构建
        • Maven 中的构建
        • Maven 的生命周期
        • 插件
        • 集成 Tomcat 插件
        • 小结
      • Maven 的依赖管理
      • Maven 的插件管理
      • IDEA 关于 Maven 的设置
      • 使用 Maven 完成 dao 层
      • 使用 Maven 完成 service 层
      • 使用 Maven 完成 web 层
      • Maven 的拆分和聚合
      • Nexus 的搭建
      • Nexus 的使用
      • 安装第三方 jar 包到私服
      • Maven 系列完结
    • 日志

    • Junit

    • JDBC

    • XML和JSON

  • JavaWeb

  • Spring

  • 主流框架

  • SpringMVC

  • SpringBoot

  • Java
  • JavaEE
  • Maven
2023-05-15
目录

Maven 的生命周期和构建

# 40.Maven 的生命周期和构建

本文讲讲 Maven 的一键构建 ‍

# Maven 中的构建

我们自己本地开发的项目,往往都要经历编译、测试、运行、打包等一系列过程,然后放到 Tomcat 的目录下,启动 Tomcat(我们上一节就是这样做的)

上述过程就是构建,其实关于构建的概念在之前的博客里就讲过了:构建、依赖管理 (opens new window)

使用了 Maven 之后,我们可以将构建交给 Maven 进行管理,我们只需输入一条简单的命令即可!

在 Maven 中,将构建分为了以下步骤(或者叫阶段):

  1. clean 清理:清理临时文件
  2. compile 编译:编译项目,例如 src/main/java 是我们的源码存放目录,默认会将编译后的文件输出到 target 目录下
  3. test 测试:对测试用例进行测试,例如 src/test/ 里存放了我们的测试代码,执行该步骤会对所有用例进行编译,然后逐个测试,并生成测试报告到控制台
  4. package 打包:将项目打成一个压缩包,默认是 jar 类型,可以通过配置 <packaging>war</packaging> 来对 web 项目进行打包
  5. install 安装:发布本项目的依赖到本地仓库中
  6. deploy 部署:发布本项目到远程仓库中
  7. 还有一些阶段我们没有列出来,后续再说。

上述每一个步骤都有对应的命令,代表了构建的不同阶段; 所有步骤合起来就是一次完整的构建步骤,在 Maven 中一次构建可以看成是一个生命,并且有不同的阶段。

例如我们想要测试的话,怎么做呢?执行 mvn test; 想要编译,则执行 mvn compile。是的没错,我们之前已经开始使用 Maven 的构建来管理项目了!

使用了 mvn test 之后,我们不用一个一个去点测试用例,而使用了 mvn compile,我们不用一个一个去编译源文件,非常方便。

# mvn clean

clean 是 Maven 工程的清理命令,执行 clean 会删除 target 目录及内容。

为什么我们需要 clean 呢?什么时候会用到这个命令呢?举个例子,在公司里接手别人开发后的项目,在该项目里通常会包含很多本地环境的信息、编译后的信息,然而不同电脑的开发环境通常是不一样的,所以需要 clean。

执行后,Maven 告诉我们删除了目录 target:

‍

# mvn compile

compile 是 Maven 工程的编译命令,作用是将 src/main/java 下的文件编译为 class 文件输出到 target 目录下。

我们在 cmd 执行 mvn compile,如下图提示成功:

查看 target 目录,class 文件已生成,编译完成。

‍

# mvn test

test 是 Maven 工程的测试命令,会执行 src/test/java 下的单元测试类,并且会同时编译主代码(src/main/java)

cmd 执行 mvn test ,会编译执行 src/test/java 下单元测试类,输出到 target/test-classes 目录。

我们可以测试下,先删除 target 目录,然后再执行 mvn test:

可以看到最后的结果,运行了一个测试案例,全部成功。

在 target 目录下,也生成了主代码编译后的 class 文件夹,其中 test-classes 是测试类的 class 文件目录。

# mvn package

package 是 Maven 工程的打包命令,对于 Java 工程执行 package 打成 jar 包,对于 web 工程打成 war 包,并且同时会编译正式代码和测试代码。

可以在 pom.xml 文件里 指定打包的类型(第 10 行)

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" 
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.peterjxl.LearnJavaMaven</groupId>
    <artifactId>hello-world</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>Maven Hello World Project!</name>
    <packaging>war</packaging>
1
2
3
4
5
6
7
8
9
10

‍ 之前我们已经分别演示过打包成 jar 包和 war 包了,这里就不再演示了。 ‍

# mvn install

install 是 Maven 工程的安装命令,会编译核心代码、测试代码,也会生成 jar 包或者 war 包,并且会将其发布到本地仓库:

‍

在本地仓库的对应目录中,可以看到对应的 jar 包或者 war 包

‍

这有什么用呢?举个例子,一个大型的项目中,通常会划分为几个小的模块,而每个模块也可以用 Maven 来管理!我们执行 mvn install 后,其他项目就可以使用坐标来引用依赖了!

# Maven 的生命周期

至此,我们演示了 Maven 关于构建的大部分命令,在 Maven 中,一次构建可以看成是一次生命,而生命中的每个阶段都有特定的命令对应,这就是 Maven 关于构建的生命周期。

每次构建的步骤如下:

清除项目编译信息 编译 测试 打包 安装 发布
mvn clean mvn compile mvn test mvn package mvn install mvn deploy

当后面的命令执行时,前面的操作过程也都会自动执行:

  • 例如执行 test 命令,也会执行编译的命令 compile;
  • 执行打包 package,也会执行 test 和 compile 命令;

所以这就是为什么我们执行 mvn test 的时候,主代码也会被编译。 ‍ 在 Maven 中,第一个命令 clean 叫做清理生命周期,后五个命令叫做默认生命周期,执行生命周期后面的命令,也会执行之前的命令

用人的生老病死来举例 Maven 的生命周期:

  • clean:就好比一个人刚出生
  • compile:童年
  • test:少年
  • package:青年
  • install:成年
  • deploy:老年

当一个人到了后面的生命周期的时候,之前的生命周期是一定经历过的。 ‍ 其实 maven 对项目构建过程分为三套相互独立的生命周期,请注意这里说的是 "三套",而且 "相互独立",这三套生命周期分别是:

  • Clean Lifecycle:清理生命周期,在进行真正的构建之前进行一些清理工作,
  • Default Lifecycle :默认生命周期,是构建的核心,含编译,测试,打包,部署等。也是我们主要掌握的生命周期
  • Site Lifecycle :站点生命周期。用于生成项目报告,站点,发布站点。用的较少,了解即可 ‍

# 插件

生命周期是抽象的概念,具体干活的是插件(plugin),每一个命令都有一个底层的对应的插件,也就是说构建是由插件来完成的。

我们在执行构建的时候,也可以看到控制台里输出了具体的插件名:

# 集成 Tomcat 插件

Maven 内置了 Tomcat 插件,我们可以直接使用该插件来运行 Web 项目!我们以上一篇博客的 web 项目为例,在根目录下执行如下命令:

mvn tomcat:run
1

可以看到 Maven 使用了一个插件:tomcat-maven-plugin: 1.1,并告诉我们项目运行在了 http://localhost: 8080/hello-world/hello:

‍

我们访问,可以看到项目是能成功访问的

这也就是我们说的一键构建。 ‍

# 小结

后续我们会介绍更多关于构建和插件的问题

上次更新: 2025/5/17 12:26:09
创建 Web 项目
Maven 的依赖管理

← 创建 Web 项目 Maven 的依赖管理→

最近更新
01
吐槽一下《僵尸校园》
05-15
02
2025 年 4 月记
04-30
03
山西大同 “订婚强奸案” 将会给整个社会带来的影响有多严重? - 知乎 转载
04-26
更多文章>
Theme by Vdoing | Copyright © 2022-2025 | 粤 ICP 备 2022067627 号 -1 | 粤公网安备 44011302003646 号 | 点击查看十年之约
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式