【Maven从入门到实战教程】第七章 Maven生命周期详解

Maven生命周期

Maven的生命周期就是对所有的构建过程进行抽象和统一。包含了项目的清理、初始化、编译、测试、打包、集成测试、验证、部署和站点生成等几乎所有的构建步骤。

Maven的生命周期是抽象的,即生命周期不做任何实际的工作,实际任务由插件完成,类似于设计模式中的模板方法。

三个生命周期

    Maven有三套相互独立的生命周期,分别是clean、default和site。
        1、clean:Clean Lifecycle在进行真正的构建之前进行一些清理工作。

        2、default:Default Lifecycle构建核心部分,如编译,测试,打包,部署等等。

        3、site:Site Lifecycle生成项目报告,站点,发布站点。

    每个生命周期包含一些阶段,这些阶段是有顺序的,并且后面的阶段依赖于前面的阶段,用户和Maven最直接的交互方式就调用这些生命周期阶段。

    较之于生命周期阶段的前后依赖关系,三套生命周期本身是相互独立的,用户可以仅仅调用clean生命周期的某个阶段,或者仅仅调用default生命周期的某个阶段,而不会对其他生命周期产生任何影响。

clean生命周期

    clean 生命周期,它包含以下阶段:
        1、pre-clean:执行一些需要在clean之前完成的工作。

        2、clean:移除所有上一次构建生成的文件。

        3、post-clean:执行一些需要在clean之后立刻完成的工作。

    mvn clean 中的 clean 就是上面的 clean,在一个生命周期中,运行某个阶段的时候,它之前的所有阶段都会被运行,也就是说,如果执行 mvn clean 将运行以下两个生命周期阶段:
        pre-clean, clean
        
    如果我们运行 mvn post-clean ,则运行以下三个生命周期阶段:
        pre-clean, clean, post-clean
        
    这是Maven很重要的一个规则,可以大大简化命令行的输入。

default生命周期

这是 Maven 的主要生命周期,被用于构建应用,包括下面的 23 个阶段:

生命周期阶段 描述
validate(校验) 校验项目是否正确并且所有必要的信息可以完成项目的构建过程。
initialize(初始化) 初始化构建状态,比如设置属性值。
generate-sources(生成源代码) 生成包含在编译阶段中的任何源代码。
process-sources(处理源代码) 处理源代码,比如说,过滤任意值。
generate-resources(生成资源文件) 生成将会包含在项目包中的资源文件。
process-resources (处理资源文件) 复制和处理资源到目标目录,为打包阶段最好准备。
compile(编译) 编译项目的源代码。
process-classes(处理类文件) 处理编译生成的文件,比如说对Java class文件做字节码改善优化。
generate-test-sources(生成测试源代码) 生成包含在编译阶段中的任何测试源代码。
process-test-sources(处理测试源代码) 处理测试源代码,比如说,过滤任意值。
generate-test-resources(生成测试资源文件) 为测试创建资源文件。
process-test-resources(处理测试资源文件) 复制和处理测试资源到目标目录。
test-compile(编译测试源码) 编译测试源代码到测试目标目录.
process-test-classes(处理测试类文件) 处理测试源码编译生成的文件。
test(测试) 使用合适的单元测试框架运行测试(Juint是其中之一)。
prepare-package(准备打包) 在实际打包之前,执行任何的必要的操作为打包做准备。
package(打包) 将编译后的代码打包成可分发格式的文件,比如JAR、WAR或者EAR文件。
pre-integration-test(集成测试前) 在执行集成测试前进行必要的动作。比如说,搭建需要的环境。
integration-test(集成测试) 处理和部署项目到可以运行集成测试环境中。
post-integration-test(集成测试后) 在执行集成测试完成后进行必要的动作。比如说,清理集成测试环境。
verify (验证) 运行任意的检查来验证项目包有效且达到质量标准。
install(安装) 安装项目包到本地仓库,这样项目包可以用作其他本地项目的依赖。
deploy(部署) 将最终的项目包复制到远程仓库中与其他开发者和项目共享。

重要的阶段如下:

阶段 处理 描述
验证 validate 验证项目 验证项目是否正确和所有需要的相关资源是否可用,这包含对pom.xml文件树的验证。
编译 compile 执行编译 源代码编译在此阶段完成。
测试 Test 测试 使用适当的单元测试框架(例如JUnit)运行测试。这些测试不需要打包和布署。
包装 package 打包 创建JAR/WAR包如在 pom.xml 中定义提及的包。
检查 verify 检查 运行所有检查,验证包是否有效且达到质量标准。
安装 install 安装 安装打包的项目到本地仓库,以供其他项目使用。
部署 deploy 部署 拷贝最终的工程包到远程仓库中,以共享给其他开发人员和工程。

    运行任何一个阶段的时候,它前面的所有阶段都会被运行,这也就是为什么我们运行mvn install 的时候,代码会被编译,测试,打包。此外,Maven的插件机制是完全依赖Maven的生命周期的,因此理解生命周期至关重要。

实验:

    把一个Maven Java项目打成jar包,在另外一个Maven项目中引入。

    1、对Maven Java项目执行install,会把Maven Java打成jar包,并安装到本地仓库。

    2、通过项目坐标引入安装到本地仓库的jar。

注意:

    如果两个项目都是Project级别的,想要相互依赖,那么必须打包之后通过依赖引入。但是如果两个项目的Module级别的,那么可以直接引入,我们在后面部分进行讲解。

同时执行两个生命周期阶段:

    mvn clean install

    Maven 会先执行 clean 命令,然后再执行 install 命令。

site生命周期

    site生命周期的目的是建立和发布项目站点,Maven能够基于POM所包含的信息,自动生成一个友好的站点,方便团队交流和发布项目信息。该生命周期包含如下阶段:
        1、pre-site:执行一些需要在生成站点文档之前完成的工作。

        2、site:生成项目的站点文档。

        3、post-site: 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备。

        4、site-deploy:将生成的站点文档部署到特定的服务器上。

猜你喜欢

转载自blog.csdn.net/ligonglanyuan/article/details/123987874