我们在用 maven 构建 java 项目时,最常用的打包命令有mvn package、mvn install、deploy,这三个命令都可完成打 jar 包或 war包的功能,但这三个命令还是有区别的。三者的区别在于包函的 maven 生命的阶段和执行目标(goal)不同。maven 生命周期(lifecycle)由各个阶段组成,每个阶段由 maven 的插件 plugin 来执行完成。生命周期(lifecycle)主要包括clean、resources、compile、install、package、testResources、testCompile、deploy等,其中带test开头的都是用于编译测试代码或运行单元测试用例的。
- 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 私服仓库。