生命周期和插件是maven的两个核心概念,一次mvn命令的执行就对应了一次生命周期。而生命周期是一个抽象的概念,他的具体实现都需要插件来完成。
生命周期
maven有三套相互独立的生命周期:clean,default和site。
- clean:目的是清理项目(pre-clean、clean、post-clean)
- default: 目的是构建项目(validate、compile、test、package、verify、install、deploy)
- site:目的是建立项目站点 (pre-site、site、post-site、site-deploy)
生命周期 | 阶段(phase) | 内置插件: Goal | 说明 |
---|---|---|---|
clean | pre-clean | - | 执行清理前需要完成的工作 |
clean | clean | maven-clean-plugin:clean | 执行清理前需要完成的工作 |
clean | post-clean | - | 执行清理后需要完成的工作 |
default | vaildate | - | 验证,确保当前配置和POM内容是有效的,包含对POM文件树的验证。 |
default | intianlize | - | 初始化,执行构建生命周期的主任务之前的初始化 |
default | generate-sources | - | 生成源码,代码生成器生成后期阶段中处理或编译的源代码 |
default | proccess-sources | - | 处理源码,提供解析、修改和转换源码。常规源码和生成的源码都可以再这里处理 |
default | generate-resoureces | - | 生成资源,生成非源码资源,通常包括元数据文件和配置文件执行清理前需要完成的工作 |
default | process-resources | maven-resources-plugin:resources | 处理资源,处理非源码资源,修改、转换和重定位资源都能在这阶段发生 |
default | compile | maven-compiler-plugin:compile | 编译,编译源码。编译过的类被放到目标目录树中 |
default | generate-resoureces | - | 处理类,处理类文件转换和增强步骤。字节码交织器和常用工具常在这一阶段操作 |
default | generate-test-sources | - | 生成测试源码,生成要操作的单元测试代码 |
default | process-test-sources | - | 处理测试源码,在编译前对测试源码执行任何必要的处理。修改、转换或复制源代码 |
default | generate-test-resources | - | 生成测试资源,生成与测试相关的非源码资源 |
default | process-test-resources | maven-resources-plugin:testResources | 处理测试资源,处理、转换或重新定位于测试相关的资源 |
default | test-compile | maven-compiler-plugin:testCompile | 测试编译,编译单元测试的源码 |
default | process-test-classes | - | 处理测试类,对编译生成文件做后期处理(Maven2.0.5及以上) |
default | test | maven-surefire-plugin:test | 测试,运行编译过的单元测试并累计结果 |
default | prepare-package | - | 执行打包前的所有操作(Maven2.1及以上) |
default | package | maven-jar-plugin:jar | 打包,将可执行的二进制文件打包到一个分布式归档文件中,如jar或war |
default | pre-integration-test | - | 前集成测试,准备集成测试,将归档文件部署到一个服务器上执行 |
default | integration-test | - | 集成测试,执行真正的集成测试,指在一个受到一定控制的模拟的真实部署环境中测试代码 |
default | post-integration-test | - | 后集成测试,解除集成测试准备,涉及环境重置或重新初始化 |
default | verify | - | 检验,检验可部署归档文件的有效性和完整性,通过后,将安装该归档 |
default | install | maven-install-plugin:install | 安装,将项目包安装到本地仓库,供其他项目依赖 |
default | deploy | maven-deploy-plugin:deploy | 部署,将项目发布到远程仓库,供其他开发人员与项目共享 |
site | pre-site | - | 执行一些在生成项目站点之前需要完成的工作 |
site | site | maven-site-plugin:site | 生成项目站点文档 |
site | peo-site | - | 执行一些在生成项目站点之后需要完成的工作 |
site | site-deploy | maven-site-plugin:deploy | 将生成的项目站点发布到服务器上 |
命令执行生命周期
一个mvn可以可以对应一次生命周期,但是mvn命令的不同对应了不同的生命周期。
mvn clean 仅执行clean生命周期的pre-clean和clean阶段
mvn test 仅执行default生命周期的validate、compile、test阶段
mvn clean 执行clean生命周期的pre-clean和clean阶段以及default生命周期的validate、compile、test、package阶段
插件
Maven的核心仅定义了抽象的生命周期,具体的任务是交由插件完成,插件以独立的构件形式存在。
一个插件往往具备多个功能,而每个功能对应着一个插件目标(Goal)。
生命周期的阶段和插件目标的绑定
为了减少用户的配置,maven给一些主要的生命周期阶段绑定了很多插件的目标,maven clean生命周期的clean阶段绑定了maven-clean-plugin的clean目标,当执行mvn clean时就会调用maven-clean-plugin的clean目标,这些都属于内置的绑定。
当然用户可以自己定义绑定,例如可以将maven-source-plugin的jar-no-fork目标(将项目的主代码打包成jar文件)绑定到default生命周期的verify阶段上。
<bulid>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.1.1</version>
<executons>
<execution>
<id>attach-sources</id>
<phase>verify</phase>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executons>
</plugin>
</plugins>
</bulid>
执行插件目标
mvn 插件前缀 : 目标(例如:maven-help-plugin插件,help为插件前缀)
可以调用插件的某个目标来执行某个任务