前面我们详细讲解了maven的一大亮点:依赖,maven做为工程大器,还有个特别重要的功能:构建今天我们主要讲解maven的生命周期,maven的生命周期就是对软件项目构建工作的抽象,一个完整的项目构建过程通常包括清理、编译、测试、打包、集成测试、验证、部署等步骤,每个步骤都有具体的任务,而具体任务都交由插件来完成。Maven为大多数构建任务编写并绑定了默认的插件,如针对编译的插件:maven-compiler-plugin。用户也可自行配置或编写插件。 maven共有三套完整的生命周期:clean,default,site【每套生命周期独立运行,且都包含多个phase(我们了解为阶段),每个phase会有一个或者多个plugin的goal来实现】 一:生命周期以及包含的phase 1)clean pre-clean :执行清理前的工作; clean :清理上一次构建生成的所有文件; post-clean :执行清理后的工作 2)default validate:校验这个项目的一些配置信息是否正确 initialize:初始化构建状态,比如设置一些属性,或者创建一些目录 generate-sources:自动生成一些源代码,然后包含在项目代码中一起编译 process-sources:处理源代码,比如做一些占位符的替换 generate-resources:生成资源文件,才是干的时我说的那些事情,主要是去处理各种xml、properties那种配置文件,去做一些配置文件里面占位符的替换 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:使用单元测试框架运行测试 prepare-package:在打包之前进行准备工作,比如处理package的版本号 package:将代码进行打包,比如jar包 pre-integration-test:在集成测试之前进行准备工作,比如建立好需要的环境 integration-test:将package部署到一个环境中以运行集成测试 post-integration-test:在集成测试之后执行一些操作,比如清理测试环境 verify:对package进行一些检查来确保质量过关 install:将package安装到本地仓库中,这样开发人员自己在本地就可以使用了 deploy:将package上传到远程仓库中,这样公司内其他开发人员也可以使用了 3)site pre-site site :生成项目的站点文档; post-site site-deploy :发布生成的站点文档 我们来看看上次构建工程的日志,来验证一下 ![]() 二)phase和plugin 默认maven会绑定一些plugin的goal到phase上去,类似resources:resources这种格式,可以解读为:resources这个plugin的resources goal process-resources resources:resources compile compiler:compile process-test-resources resources:testResources test-compile compiler:testCompile test surefire:test package jar:jar或者war:war install install:install deploy deploy:deploy site的生命周期是 site site:site site-deploy site:deploy clean的生命周期是 clean clean:clean 三)maven的命令行和生命周期 比如,我们运行了maven clean package命令 clean是指的clean生命周期中的clean phase package是指的default生命周期中的package phase 此时就会执行clean生命周期中,在clean phase之前的所有phase和clean phase,pre clean,clean 同时会执行default生命周期中,在package phase之前的所有phase和package phase 有些命令不执行生命周期的任何一个phase,而是直接指定插件的一个goal 比如mvn dependency:tree,就是直接执行dependency这个插件的tree这个goal,这个意思就是会自动分析pom.xml里面的依赖声明,递归解析所有的依赖,然后打印出一颗依赖树 mvn deploy:depoy-file,就是直接执行deploy这个插件的deploy-file这个goal,这个意思就是说将指定目录的jar包,以指定的坐标,部署到指标的maven私服仓库里去,同时使用指定仓库id对应的server的账号和密码。 |