当前位置: 首页 > news >正文

MAVEN——PACKAGE、INSTALL、DEPLOY的联系与区别

我们在用maven构建java项目时,最常用的打包命令有mvn package、mvn install、deploy,这三个命令都可完成打jar包或war(当然也可以是其它形式的包)的功能,但这三个命令还是有区别的。下面通过分别执行这三个命令的输出结果,来分析各自所执行的maven的生命周期。

MVN CLEAN PACKAGE

è¿éåå¾çæè¿°

è¿éåå¾çæè¿°

MVN CLEAN INSTALL

è¿éåå¾çæè¿°

è¿éåå¾çæè¿°

MVN CLEAN DEPLOY(忽略最后的BUILD FAILURE)

è¿éåå¾çæè¿°

è¿éåå¾çæè¿°

通过三个命令的输出我们可以看出三者的区别在于包函的maven生命的阶段和执行目标(goal)不同。在我的上一篇文章https://blog.csdn.net/zhaojianting/article/details/80321488 中介绍了maven的生命周期和各种插件,不明白的请参考此博文。maven生命周期(lifecycle)由各个阶段组成,每个阶段由maven的插件plugin来执行完成。生命周期(lifecycle)主要包括clean、resources、complie、install、pacakge、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私服仓库

在TARGET 目录下可找到 JAR包

å¨è¿éæå¥å¾çæè¿°

注: 此方式打出来的是没有加入依赖包的

maven要打依赖包,需要添加插件

 
<build><plugins><plugin><artifactId>maven-assembly-plugin</artifactId><configuration><archive><manifest><!--main主类的全类名--><mainClass>main.Class</mainClass></manifest></archive><descriptorRefs><descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs></configuration><executions><execution><id>make-assembly</id><!--指定在打包节点执行jar包合并操作, 使用package就可以打出全量包--><phase>package</phase><goals><goal>single</goal></goals></execution></executions></plugin></plugins>
</build>

å¨è¿éæå¥å¾çæè¿°

相关文章:

  • Linux环境下C++ 接入OpenSSL
  • sql server修改表结构及字段数据类型
  • Android Studio 安装及使用
  • 中国出海主力系列专访之三七互娱:亚马逊云科技助力三七互娱海外“出圈”之路
  • go 适配器模式
  • MySQL/Oracle用逗号分割的id怎么实现in (逗号分割的id字符串)。find_in_set(`id`, ‘1,2,3‘) 函数,
  • 从哪些方面分析Linux内核源码
  • C语言回文数(1106:回文数(函数专题))
  • 前端环境变量释义
  • 关于爬虫中的hook(defineProperty,hook cookies, hook载荷数据,hookXHR)
  • 企业办公室信息安全保密办法——推荐用天锐绿盾数据安全防泄密系统 | 防止核心文件数据、资料泄露
  • 〖大前端 - 基础入门三大核心之JS篇㊴〗- DOM节点的关系
  • 威班11月份PMP模拟考试实录
  • 2.5计划任务远程管理
  • C++引用
  • Android 控件背景颜色处理
  • Android交互
  • canvas 高仿 Apple Watch 表盘
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • happypack两次报错的问题
  • HTML中设置input等文本框为不可操作
  • java8 Stream Pipelines 浅析
  • leetcode-27. Remove Element
  • leetcode46 Permutation 排列组合
  • Mac 鼠须管 Rime 输入法 安装五笔输入法 教程
  • Magento 1.x 中文订单打印乱码
  • magento 货币换算
  • STAR法则
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • 爱情 北京女病人
  • 从PHP迁移至Golang - 基础篇
  • 从零开始的无人驾驶 1
  • 聊聊redis的数据结构的应用
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • 前端性能优化——回流与重绘
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • ​TypeScript都不会用,也敢说会前端?
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • (2)(2.10) LTM telemetry
  • (C#)Windows Shell 外壳编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令...
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (顶刊)一个基于分类代理模型的超多目标优化算法
  • (二)fiber的基本认识
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (转) 深度模型优化性能 调参
  • (转)C语言家族扩展收藏 (转)C语言家族扩展
  • (转)项目管理杂谈-我所期望的新人
  • (转载)微软数据挖掘算法:Microsoft 时序算法(5)
  • .cfg\.dat\.mak(持续补充)