6 详解Maven命令执行的内部流程

要知道Maven命令执行的内部流程,首先要了解Maven生命周期

1 生命周期简介

Maven有三套相互独立的生命周期,分别是:

  • Clean Lifecycle(Clean生命周期) :构建之前进行清理工作
  • Default Lifecycle: 构建的核心部分,编译,测试,打包,部署等等
  • Site Lifecycle :生成项目报告,站点,发布站点

三套生命周期,即可单独调用,也可组合调用

2 生命周期阶段(Phase)

2.1 每套生命周期都由一组阶段(Phase)组成

2.2 Clean生命周期的3个阶段

阶段 描述
pre-clean 执行需要在clean之前完成的工作
clean 移除所有上一次构建生成的文件
post-clean 执行需要在clean之后完成的工作

mvn clean 命令中的clean就是在执行clean阶段

2.3 Site生命周期的4个阶段

阶段 描述
pre-site 执行需要在生成站点文档之前完成的工作
clean 生成项目站点文档
post-site 执行需要在生成站点文档之后完成的工作,并且为部署做准备
site-deploy 将生成的站点文档部署到指定服务器

2.4 Default生命周期的23个阶段:

生命周期阶段 描述
validate 验证项目是否正确,且所有必要信息可用于完成构建过程
initialize 建立初始化状态,例如:设置属性,创建目录
generate-sources 自动生成一些源代码,然后包含在项目代码中一起编译
process-sources 处理源代码,例如:源码中占位符替换
generate-resources 生成资源文件,例如:配置文件中占位符替换
process-resources 将资源文件拷贝到目标目录,准备打包阶段
compile 编译该项目的源代码
process-classes 从编译生成的文件提交处理,例如:Java类的字节码增强/优化
generate-test-sources 自动化生成测试代码
process-test-sources 处理测试代码,比如过滤一些占位符
generate-test-resources 生成测试用的资源文件
process-test-resources 拷贝测试用的资源文件到目标目录
test-compile 编译测试源代码到测试目标目录
process-test-classes 处理测试代码文件编译生成的文件
test 运行测试使用合适的单元测试框架(JUnit)
prepare-package 在打包之前进行准备工作,例如:处理package的版本号
package 将代码进行打包,比如jar包
pre-integration-test 完成执行集成测试之前所需操作。例如,设置所需的环境
integration-test 将package部署到一个环境中以运行集成测试
pre-integration-test 完成集成测试已全部执行后所需操作。例如,清理环境
verify 运行任何检查,验证包是有效的,符合质量审核规定
install 将包安装到本地存储库,它可以用作当地其他项目的依赖
deploy 复制最终的包到远程仓库与其他开发者和项目共享

2.5 阶段特点

  • 运行某个阶段时,它之前的所有阶段都会被运行
    mvn clean 等同于 mvn pre-clean clean
    mvn post-clean 等同于 mvn pre-clean clean post-clean

3 plugin与goal

3.1 plugin相当于一系列goal集合(个人见解)

3.2 goal

  • maven运行某阶段(phase),其实就是在运行绑定在该阶段(phase)上的一些plugin goal

  • goal可以绑定到任意个phase中,一个phase有一个或多个goal,goal也是按顺序执行的,一个phase被执行时,绑定到phase里的goal会按绑定的时间被顺序执行,不管phase己经绑定了多少个goal,你自己定义的goal都可以继续绑到phase中

  • 一个未绑定goal的phase是没有任何意义的

例
    clean phase默认绑定clean:clean
    clean(plugin):clean(goal)

    maven clean 就是 执行clean(plugin)的clean(goal)
  • 也可直接执行插件的goal
例
    mvn clean:clean 
    就是直接执行clean插件的clean(goal)

3.3 如何配置plugin

  • 插件可自由绑定在任意阶段

  • 此处以生成源码jar的插件配置


    
        
            org.apache.maven.plugins
            maven-source-plugin
            2.1.1
            
                
                    attach-sources
                    verify
                    
                        jar-no-fork
                    
                
            
        
    

  • 根据配置可以看出,将生成源码jar的goal绑定在verify阶段上,此时只需运行mvn verify即可生成源码jar

  • 如果在命令中执行插件,使用-Dkey=value可进行插件设置

mvn install -Dmaven.test.skip=true
就是在执行install时,跳过test
  • 官网插件大全

  • 插件与依赖一样,也存在仓库中


    
        central
        Maven Plugin Repository
        http://repo1.maven.org/maven2
        default
        
            false
        
        
            never
        
    

4 图解Maven命令执行过程

Maven命令执行过程.png

你可能感兴趣的:(6 详解Maven命令执行的内部流程)