本篇来介绍Maven的生命周期和前面介绍过几个命令的详细介绍过程。先介绍生命周期,生命周期中不同阶段就包括了一些命令,所以理解了生命周期,再来看看每一个命令的详细使用过程。

1.Maven的生命周期分类

Maven生命周期定义了各个构建环节的执行顺序,有了这个清单,Maven就可以自动化执行构建命令了。

Maven有三套相互独立的生命周期,分别是
1)Clean Lifecycle 在进行真正的构建之前进行一些清理工作
2)Default Lifecycle: 构建的核心部分,包含 编译,测试,打包,安装和部署等。
3)Site Lifecycle: 生成项目报告,站点,发布站点。

他们是相互独立的,你可以仅仅执行mvn clean来清理工作目录,仅仅调用mvn site来生成站点。也可以这样执行mvn clean install site运行所有这三套生命周期。

2.不同生命周期的不同阶段

先看看Clean Lifecycle生命周期的不同阶段。
Clean生命周期一共包含三个阶段:
1)pre-clean: 执行一些需要在clean之前完成的工作
2)clean:移除所有上一次构建生成的文件
3)post-clean: 执行一些需要在clean之后立刻完成的工作

site的生命周期:
1)pre-site:执行一些需要在生成站点文档之前完成的工作。
2)site:生成项目的站点文档
3)post-site:执行一些需要在生成站点文档之后完成的工作,为部署做准备
4)site-deploy:将生成的站点文档部署到特定的服务器上。
工作中可能经常用到的是site阶段和site-deploy阶段,用来生成和发布maven站点,这个功能相当强大,经理比较喜欢这个,文档和统计数据自动生成,很好看。

Default生命周期是Maven生命周期中最重要的一个,绝大部分工作都发生在这个生命周期中。
这里只列出一部分重要和常用的阶段。
1)validate
   包含generate-sources和process-source两个动作,也就是复制并处理资源文件,至目标目录,准备打包
2)compile 编译项目源码
   包含process-class generate-test-sources generate-test-resources process-test-resources
复制并处理资源文件,至目标测试目录。
3)test-compile:编译测试源代码
   包含process-test-classes 和prepare-package
4)package 接受编译好的代码,打包成jar或者war
   包含pre-integration-test和integration-test和verify
5)install 将包安装到本地仓库,以让其他项目依赖。
6)deploy 将最终的包复制到远程的仓库,以让其他开发人员与项目共享或部署到服务器上运行。

3.具体命令介绍环境准备

我们前面提到了pom.xml,但是并没有解释什么是pom,是英文单词Project Object Model,也就是项目对象模型。我们学习过DOM(文档对象模型),POM(页面对象模型)。pom.xml文件是整个maven项目的核心,几乎我们maven项目的全部配置和依赖都在这个pom.xml文件中进行设置。这个文件的重要性可以和web工程中web.xml文件一样类比。

maven是这样设计的,当输入mvn 构建相关的命令,maven会自动去下载和这个任务相关的插件,maven核心组件并没有提前下载这些插件,所以第一次构建都需要下载这个构建所有任务相关的插件。

在Eclipse中创建一个maven的普通java工程。

主程序下代码

package hello;public class Hello {public String sayHello(String name) {return "Hello "+name;}
}

测试程序代码

package cases;import static org.junit.Assert.assertEquals;
import org.junit.Test;import hello.Hello;public class HelloTest {Hello hello = new Hello();@Testpublic void test1() {String result = hello.sayHello("Anthony");assertEquals("Hello Anthony", result);}
}

pom.xml文件内容

<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.anthony.maven</groupId><artifactId>HelloDemo</artifactId><version>0.0.1-SNAPSHOT</version><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency></dependencies>
</project>

右键工程名称,maven-Update projects...,选择强制更新,junit依赖包就可以下载到本地仓库,测试代码中导入包语句就没问题。

4.编译命令: mvn compile和mvn test-compile

本来按照顺序,我们先介绍mvn clean清理命令。但是我们是一个干净的项目,前面没有做过编译构建操作,所以不存在清除这个动作,清除放在第二个命令来介绍。

注意一点,当我们执行和构建相关的maven命令的时候,一定要先cd到pom.xml所在的文件夹,也就是该工程的根目录。

先cd到maven工程的根目录,我发现当前没有target,如果执行了编译,就会产生target文件夹,而且文件夹下有classes或者test-classes文件夹。

先来执行mvn compile 也就是编译主程序,看看在target下的classes下有没有这个编译之后的class字节码文件。

上面执行mvn compile,显示构建成功,然后到target下的classes文件下发现有和主程序一样的包名结构下出现了一个Hello.class的字节码文件。

简单来看看cmd这个编译产生的日志,开始是扫描项目,根据上面default Lifecycle的知识,本来是先执行validate阶段,然后执行编译。上面日志,有显示(绿色字体)执行了下面两个阶段

maven-resources-plugin:2.6:resources
maven-compiler-plugin:3.1:compile

第一个是资源相关的插件,负责拷贝资源到相关路径。第二个插件是编译插件。这里说下maven-resources-plugin:2.6:resources这个格式,前面maven-resources-plugin:2.6这段叫插件名称和版本,后面resources这个是一个动作,也算一个命令,这个叫目标。怎么理解这个插件的目标,这里就是调用该插件执行resources这个命令,这就是目标。这种格式我们下下面命令会看到不同插件名称和目标。

上面清楚了主程序的编译过程和产生字节码的过程,下面看看测试程序代码的编译过程。

没执行mvn test-compile命令之前,target下是没有test-classes文件夹的。

然后我们来执行mvn test-compile

再来看看test-comiple的编译日志,记录下用了哪些插件,执行了哪些阶段的任务(绿色字体)

maven-resources-plugin:2.6:resources
maven-compiler-plugin:3.1:compile
maven-resources-plugin:2.6:testResources
maven-compiler-plugin:3.1:testCompile

同样的,前面是插件名称和版本,后面是插件的目标,或者执行动作。翻译过来的意思就是,复制主程序下的资源文件到相关路径(如果有就复制),执行主程序编译。复制测试下的资源文件到相关路径,执行测试程序编译。

5.清理命令:mvn clean

前面我们介绍了主程序的编译和测试程序的编译,这下我们有环境来演示mvn clean的操作。

清除命令之前,target的文件目录是这样。

执行以下mvn clean命令

执行清除命令之后,效果就是把项目根目录下的target目录以及里面的文件全部都删除了。当前这个清除日志就调用了一个插件执行任务。

maven-clean-plugin:2.5:clean

根据上面知识,我们知道执行了mvn clean就走完了一遍Clean Lifecycle这种类型的生命周期。

6.运行测试命令:mvn test

maven自动化构建是因为自己设计了一套命令的执行顺序。在default生命周期内,如果直接执行mvn test,那么maven会直接帮我们执行clean 和 compile和test-compile这些命令。下面我们通过执行mvn test来演示这个结论。

我在执行mvn test过程下载好几个插件,这也体现了不同命令调用不同插件执行任务特定,而且mven发现本地仓库没有这个插件就会去中央仓库下载。

如果下载过程中由于网络不行或者网络中断,那么这次构建就会显示失败,可以再来一次mvn test, 这个test过程所依赖的插件有很多,所以下载很慢。

下面我直接把我cmd中运行mvn test成功的日志拿出来看看。

C:\Users\Anthony\eclipse-workspace\HelloDemo>mvn test
[INFO] Scanning for projects...
[INFO]
[INFO] --------------------< com.anthony.maven:HelloDemo >---------------------
[INFO] Building HelloDemo 0.0.1-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ HelloDemo ---
[WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ HelloDemo ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ HelloDemo ---
[WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ HelloDemo ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ HelloDemo ---
[INFO] Surefire report directory: C:\Users\Anthony\eclipse-workspace\HelloDemo\target\surefire-reports-------------------------------------------------------T E S T S
-------------------------------------------------------
Running cases.HelloTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.091 secResults :Tests run: 1, Failures: 0, Errors: 0, Skipped: 0[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  1.882 s
[INFO] Finished at: 2019-09-08T14:50:19+08:00
[INFO] ------------------------------------------------------------------------C:\Users\Anthony\eclipse-workspace\HelloDemo>

上面测试包含测试报告输出,告诉我们执行了一个用例,失败和报错都是0。下面再看看执行了哪些插件的任务。

maven-resources-plugin:2.6:resources
maven-compiler-plugin:3.1:compile
maven-resources-plugin:2.6:testResources
maven-compiler-plugin:3.1:testCompile
maven-surefire-plugin:2.12.4:test

7.安装命令:mvn install

这里我们先执行下mvn clean,清除前面产生的编译文件。

C:\Users\Anthony\eclipse-workspace\HelloDemo>mvn install
[INFO] Scanning for projects...
[INFO]
[INFO] --------------------< com.anthony.maven:HelloDemo >---------------------
[INFO] Building HelloDemo 0.0.1-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ HelloDemo ---
[WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ HelloDemo ---
[INFO] Changes detected - recompiling the module!
[WARNING] File encoding has not been set, using platform encoding GBK, i.e. build is platform dependent!
[INFO] Compiling 1 source file to C:\Users\Anthony\eclipse-workspace\HelloDemo\target\classes
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ HelloDemo ---
[WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ HelloDemo ---
[INFO] Changes detected - recompiling the module!
[WARNING] File encoding has not been set, using platform encoding GBK, i.e. build is platform dependent!
[INFO] Compiling 1 source file to C:\Users\Anthony\eclipse-workspace\HelloDemo\target\test-classes
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ HelloDemo ---
[INFO] Surefire report directory: C:\Users\Anthony\eclipse-workspace\HelloDemo\target\surefire-reports-------------------------------------------------------T E S T S
-------------------------------------------------------
Running cases.HelloTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.095 secResults :Tests run: 1, Failures: 0, Errors: 0, Skipped: 0[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ HelloDemo ---
[INFO] Building jar: C:\Users\Anthony\eclipse-workspace\HelloDemo\target\HelloDemo-0.0.1-SNAPSHOT.jar
[INFO]
[INFO] --- maven-install-plugin:2.4:install (default-install) @ HelloDemo ---
[INFO] Installing C:\Users\Anthony\eclipse-workspace\HelloDemo\target\HelloDemo-0.0.1-SNAPSHOT.jar to C:\Users\Anthony\.m2\repository\com\anthony\maven\HelloDemo\0.0.1-SNAPSHOT\HelloDemo-0.0.1-SNAPSHOT.jar
[INFO] Installing C:\Users\Anthony\eclipse-workspace\HelloDemo\pom.xml to C:\Users\Anthony\.m2\repository\com\anthony\maven\HelloDemo\0.0.1-SNAPSHOT\HelloDemo-0.0.1-SNAPSHOT.pom
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  3.554 s
[INFO] Finished at: 2019-09-08T14:53:42+08:00
[INFO] ------------------------------------------------------------------------C:\Users\Anthony\eclipse-workspace\HelloDemo>

再来看看mvn install调用了哪些插件,执行了哪些任务。

maven-resources-plugin:2.6:resources
maven-compiler-plugin:3.1:compile
maven-resources-plugin:2.6:testResources
maven-compiler-plugin:3.1:testCompile
maven-surefire-plugin:2.12.4:test
maven-jar-plugin:2.4:jar
maven-install-plugin:2.4:install

这里多了jar-plugin,是因为我忘记介绍了mvn package这个命令。下面我来执行以下mvn package命令


C:\Users\Anthony\eclipse-workspace\HelloDemo>mvn package
[INFO] Scanning for projects...
[INFO]
[INFO] --------------------< com.anthony.maven:HelloDemo >---------------------
[INFO] Building HelloDemo 0.0.1-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ HelloDemo ---
[WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ HelloDemo ---
[INFO] Changes detected - recompiling the module!
[WARNING] File encoding has not been set, using platform encoding GBK, i.e. build is platform dependent!
[INFO] Compiling 1 source file to C:\Users\Anthony\eclipse-workspace\HelloDemo\target\classes
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ HelloDemo ---
[WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ HelloDemo ---
[INFO] Changes detected - recompiling the module!
[WARNING] File encoding has not been set, using platform encoding GBK, i.e. build is platform dependent!
[INFO] Compiling 1 source file to C:\Users\Anthony\eclipse-workspace\HelloDemo\target\test-classes
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ HelloDemo ---
[INFO] Surefire report directory: C:\Users\Anthony\eclipse-workspace\HelloDemo\target\surefire-reports-------------------------------------------------------T E S T S
-------------------------------------------------------
Running cases.HelloTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.075 secResults :Tests run: 1, Failures: 0, Errors: 0, Skipped: 0[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ HelloDemo ---
[INFO] Building jar: C:\Users\Anthony\eclipse-workspace\HelloDemo\target\HelloDemo-0.0.1-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  3.103 s
[INFO] Finished at: 2019-09-08T15:33:50+08:00
[INFO] ------------------------------------------------------------------------C:\Users\Anthony\eclipse-workspace\HelloDemo>

目前我们介绍了以下命令

  • mvn clean
  • mvn compile
  • mvn test-compile
  • mvn test
  • mvn package
  • mvn install
  • mvn deploy

其中mvn deploy命令我们暂时没有介绍。从上面每个命令我收集的插件调用来看,我们可以发现一个规律。

执行mvn test,会自动帮我们执行mvn compile和mvn test-compile。

执行mvn package,会自动帮我们执行mvn test

执行mvn install,会自动执行mvn package。

越往下走执行的命令,都会包含前面命令的全部阶段。这种设计思想就是maven能够自动化构建的核心。这个设计思想,也可以解释我在前面文章,为什么使用mvn clean install就完成API报告获取和TestNG用例执行。https://blog.csdn.net/u011541946/article/details/100548574

Maven入门-6-Maven的生命周期和核心命令详细介绍相关推荐

  1. Maven第6篇:生命周期 插件

    Maven第6篇:生命周期 & 插件 前面我们使用maven过程中,用到了一些命令,如下: mvn clean mvn compile mvn test mvn package mvn ins ...

  2. Maven学习:项目构建生命周期

    图1 maven对项目构建的生命周期划分为三个阶段 可以比喻成婴儿时期,成年人时期,和老年时期. 成年人时期(default)做的事情最多,任务也基本上都处于这个阶段. 图2 Clean要干的事情如图 ...

  3. maven生命周期和常用命令

    1,生命周期 Maven 有以下三个标准的生命周期: clean:项目清理的处理     default(或 build):项目部署的处理     site:项目站点文档创建的处理 目标的执行顺序取决 ...

  4. 用于管理容器生命周期的 Docker 命令

    了解 Docker 容器的各种状态对于任何认真的 Docker 用户都至关重要. 我将解释容器生命周期,然后显示生命周期每个阶段的 Docker 命令. 但在学习所有这些东西之前,让我们再次回顾一下容 ...

  5. Apache Kafka 入门 - Kafka命令详细介绍

    Apache Kafka 入门 Apache Kafka 入门大概分为5篇博客,内容都比较基础,计划包含以下内容: Kafka的基本配置和运行 Kafka命令详细介绍 Kafka-manager的基本 ...

  6. Maven学习小结(七 生命周期[转])

    Maven2的阶段(生命周期)说明: Maven2拥有三套独立的生命周期,Maven的命令也是基于这些生命周期来说的. 1.clean:清理先前构建的构件,又分为下面三个下阶段: a.pre-clea ...

  7. maven的生命周期和核心插件的功能

    maven预定义了许多的阶段(phase),每个插件都依附于这些阶段,并且在进入某个阶段的时候,调用运行这些相关插件的功能.我们先来看完整的maven生命周期: 生命周期 阶段描述 validate ...

  8. Maven读书笔记之七(生命周期和插件)

    1. 生命周期What? Maven一般能自动化执行的生命周期有清理.编译.测试.打包,部署. 2. 生命周期详解 2.1 三套生命周期 2.1.1 clean生命周期 pre-clean:清理前的准 ...

  9. maven生命周期及常见命令

    前言 我们在日常开发中都会用到maven,gradle-这些项目管理工具.他们能帮助我们快速构建一个新项目,管理项目的jar包依赖关系.我们可以使用maven提供的命令来和maven进行交互,让mav ...

最新文章

  1. 谁说程序员干不过写ppt的,码农就该这样雄起
  2. Conclusion
  3. centos中bash占用cpu_Docker 多种维度限制容器可用的 CPU
  4. 3c技能和背包需要改建吗?_认为您需要仪表板? 您应该改建一个笔记本。
  5. linux虚拟终端时间短,使用Screen创建虚拟终端避免Linux远程断线
  6. hibernate mysql cascade_Hibernate第五篇【inverse、cascade属性详解】
  7. 【3D游戏建模】3D建模师的发展前景
  8. python 一维数组所有元素是否大于_利用Python进行数据分析(5) NumPy基础: ndarray索引和切片...
  9. Apache Spark Jobs 性能调优(二)
  10. 国潮中国风工作学习总结学习PPT模板
  11. beanshell断言_从BeanShell断言脚本调用Jmeter函数
  12. [工具:iperf吞吐率测试工具 ]安装以及使用
  13. abb机器人伺服电机报闸是什么_ABB机器人伺服电机进油的分析及解决措施
  14. Thinksystem ST550安装windows2008R2
  15. 如何预防网站被篡改,劫持
  16. Kafka配置kerberos安全认证
  17. python计算机器人运动学分析_orocos_kdl学习(二):KDL Tree与机器人运动学
  18. 开环控制系统与闭环控制系统
  19. MP40N120-ASEMI场效应管MP40N120
  20. 黑客丛林之旅 第十关

热门文章

  1. 总结了一下小半辈子发现三点:
  2. Qt5.12.x 导入CMakeLists.txt 工程 提示 No suitable kits found.
  3. esxi6.5磁盘格式转换
  4. linux的基础简答题,Linux认证考试试题及答案「简答题」
  5. Batch 批处理脚本
  6. QGIS与网易有道词典冲突
  7. Linux集群部署及搭建-----Hadoop
  8. JS的严格模式和标准模式
  9. renren-generator:java: 找不到符号,类 Longblob
  10. gitlab .gitlab-ci.yml 文件赏析