相信开发很多年的人不了解maven生命周期的大有人在,其实基本大家都天天接触、相信大多数java开发者应该知道一些maven 的命令。
maven的生命周期(Lifecycle)主要包括clean、resources、complie、install、pacakge、testResources、testCompile、deploy等,其中带test开头的都是用业编译测试代码或运行单元测试用例的。maven生命周期(Lifecycle)由各个阶段组成,每个阶段由maven的插件plugin来执行完成。
我们在用maven构建java项目时,最常用的打包命令有mvn package、mvn install、mvn deploy,这三个命令都可完成打jar包或war(当然也可以是其它形式的包)的功能。但这三个命令还是有区别的,可以从执行这三个命令的输出结果来分析看,各自所执行的maven的生命周期不同。通过执行这三个命令的输出结果我们可以看出三者的区别在于包函的maven生命的阶段和执行目标(goal)不同。
感兴趣的本地可以分别试一下会发现
仔细查看三个命令执行输出的结果,可以发现,
- mvn clean package 依次执行了clean、resources、compile、testResources、testCompile、test、jar(打包)等7个阶段。
- mvn clean install 依次执行了clean、resources、compile、testResources、testCompile、test、jar(打包)、install等 8个阶段。
- mvn clean deploy 依次执行了clean、resources、compile、testResources、testCompile、test、jar(打包)、install、deploy等9个阶段。
由上面的分析可知主要区别如下,
- package 命令完成了项目编译、单元测试、打包功能,但没有把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库和远程maven私服仓库
- install 命令完成了项目编译、单元测试、打包功能,同时把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库,但没有布署到远程maven私服仓库
- deploy 命令完成了项目编译、单元测试、打包功能,同时把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库和远程maven私服仓库
用mvn install
后,新改的内容不生效,一定要使用mvn clean install 才生效,具体的一些差异可以通过执行这些命令看看到底有哪些差异。