从01开始 从01开始
首页
  • 计算机科学导论
  • 数字电路
  • 计算机组成原理

    • 计算机组成原理-北大网课
  • 操作系统
  • Linux
  • Docker
  • 计算机网络
  • 计算机常识
  • Git
  • JavaSE
  • Java高级
  • JavaEE

    • Ant
    • Maven
    • Log4j
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • Servlet
  • Spring
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC
  • SpringBoot
  • 学习网课的心得
  • 输入法
  • 节假日TodoList
  • 其他
  • 关于本站
  • 网站日记
  • 友人帐
  • 如何搭建一个博客
GitHub (opens new window)

peterjxl

人生如逆旅,我亦是行人
首页
  • 计算机科学导论
  • 数字电路
  • 计算机组成原理

    • 计算机组成原理-北大网课
  • 操作系统
  • Linux
  • Docker
  • 计算机网络
  • 计算机常识
  • Git
  • JavaSE
  • Java高级
  • JavaEE

    • Ant
    • Maven
    • Log4j
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • Servlet
  • Spring
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC
  • SpringBoot
  • 学习网课的心得
  • 输入法
  • 节假日TodoList
  • 其他
  • 关于本站
  • 网站日记
  • 友人帐
  • 如何搭建一个博客
GitHub (opens new window)
  • 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系列完结
      • Maven
    • 日志

    • Junit

    • JDBC

    • XML和JSON

    • Java
  • JavaWeb

  • Spring

  • 主流框架

  • SpringMVC

  • SpringBoot

  • Java并发

  • Java源码

  • JVM

  • 韩顺平

  • Java
  • 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:

​​

‍

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

​​

‍

‍

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

‍

# 小结

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

在GitHub上编辑此页 (opens new window)
上次更新: 2023/5/15 16:02:46
创建Web项目
Maven的依赖管理

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

Theme by Vdoing | Copyright © 2022-2023 粤ICP备2022067627号-1 粤公网安备 44011302003646号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式