1.3 常用命令作战频道表


文档摘要

1.3 常用命令作战频道表 本节摘要:mvn 的核心命令对应生命周期的阶段而非孤立动作,clean、compile、test、package、install、deploy 各有明确的战场定位。配合 -U、-o、-pl、-am、-DskipTests 等参数,可以组合出日常与应急两类战况的完整指令集。本节逐条给出使用时机与输出解读。 从一次日常值班说起 周一早上,值班工程师收到两个任务:把 risk-engine 最新代码打成包发测试环境;查一下昨晚流水线上一个诡异的下载失败。前者是日常调度,后者是应急作战,两种战况用的命令组合完全不同。Maven 的命令看似很多,按"频道"归类后其实只有两组:生命周期命令(clean 到 deploy 这条主线)与诊断参数(挂在任何命令后面的修饰符)。

1.3 常用命令作战频道表

本节摘要:mvn 的核心命令对应生命周期的阶段而非孤立动作,clean、compile、test、package、install、deploy 各有明确的战场定位。配合 -U、-o、-pl、-am、-DskipTests 等参数,可以组合出日常与应急两类战况的完整指令集。本节逐条给出使用时机与输出解读。

从一次日常值班说起

周一早上,值班工程师收到两个任务:把 risk-engine 最新代码打成包发测试环境;查一下昨晚流水线上一个诡异的下载失败。前者是日常调度,后者是应急作战,两种战况用的命令组合完全不同。Maven 的命令看似很多,按"频道"归类后其实只有两组:生命周期命令(clean 到 deploy 这条主线)与诊断参数(挂在任何命令后面的修饰符)。先看主线。

一、生命周期主线:六个核心命令

六个命令对应六个阶段目标,从左到右依次推进,理解它们的边界比背诵更重要。

# 清理:删除 target 目录,回到干净状态 mvn clean # 输出关键行:Deleting 目录 target # 编译:把主源码编译到 target/classes mvn compile # 输出关键行:Compiling 42 source files to ... target/classes # 测试:执行单元测试并生成报告,测试失败则构建失败 mvn test # 输出关键行:Tests run: 87, Failures: 0, Errors: 0, Skipped: 2 # 打包:按 packaging 生成 jar 或 war 到 target 目录 mvn package # 输出关键行:Building jar: ... target/risk-engine-1.0.0.jar # 安装:把打好的包放进本地仓库,供本机其他模块引用 mvn install # 输出关键行:Installing ... repository/com/shop/risk/risk-engine/1.0.0/risk-engine-1.0.0.jar # 部署:把包上传到远程仓库,供全团队使用 mvn deploy # 输出关键行:Uploading to releases: ... risk-engine-1.0.0.jar

两个使用要点。第一,执行某个阶段会连带执行它之前的所有阶段:mvn package 会先编译、再测试。第二,clean 与其他命令是两套生命周期(第 2 章展开),所以日常写 mvn clean package 是把两件事串起来:先清场再打包。经验法则是本地打包永远带 clean——增量构建偶尔会保留过期类文件,导致"改了代码没生效"的灵异现象,排查半天不如清场重来。

二、高频参数:四个修饰符决定战况

参数决定同一条命令在什么模式下运行。四个最常用的:

# 跳过测试:赶时间验证编译打包是否通畅,产出的包禁止上线 mvn package -DskipTests # 输出中测试段显示:Tests are skipped. # 强制刷新快照:怀疑 SNAPSHOT 依赖不是最新的,强制检查远程 mvn clean package -U # 输出关键行:Downloading from nexus: ... rule-sdk/2.1-SNAPSHOT/maven-metadata.xml # 离线模式:断网环境或确认缓存齐全时,禁止任何远程访问 mvn clean package -o # 若缓存缺失会直接报错:Cannot access ... in offline mode # 组合示例:CI 上只构建变更模块及其依赖 mvn clean install -pl risk-rule,risk-web -am -DskipTests=false # -pl 指定要构建的模块列表,-am 表示同时构建它们依赖的上游模块

-pl-am 是多模块项目的提速利器:十几个模块的工程只改了两个,就没必要全量构建。反过来还有 -amd(构建依赖了指定模块的下游),排查"谁受影响"时用得上。

三、战场纪律与输出解读

命令的输出是作战记录,不是噪音。以一次成功的 package 为例,输出按块分段:先是 Reactor 摘要列出参与构建的模块,中间逐段显示每个生命周期阶段的插件执行,末尾的 BUILD SUCCESS 与总耗时。失败时看两处:[ERROR] 行给出直接原因与失败位置,末尾的 reactor 摘要标出失败模块,配合 -e(打印堆栈)或 -X(调试级日志,第 1.4 节)可以逐层下钻。

参数还有一组冷门但关键时刻救命的组合,一并交代:

# 只跑到某个阶段为止的验证:编译加测试但不出包 mvn clean test # 传系统属性给测试代码(例如指定测试用数据库标志) mvn test -Dtest.env=ci # 从失败处继续:跳过已成功的模块(Maven 3 的 resume 特性配合 -rf) mvn install -rf :risk-web # 十模块工程在第三块失败 修复后从 risk-web 继续 前两块不重跑

-rf 的价值在长流水线:十模块全量构建到第八模块失败,修复后全量重跑等于把前面七块的编译测试再付一遍钱。:模块名 的写法(冒号开头按 artifactId 定位)比路径写法更抗目录调整。

最后用一段十分钟练习收尾本节的命令学习:在 risk-engine 目录依次执行 cleancompiletestpackageinstall 五条命令,每条执行后看一眼 target 目录的变化(哪些文件出现、哪些被更新)。做完这组观察,"每个命令到底产出了什么"就不再依赖记忆——你的手和眼睛已经录入了一遍完整证据链。

⚠️ 常见坑:把 mvn install 当成部署。install 只写入本机仓库,团队其他人完全看不到;要共享必须 deploy 到远程仓库。反过来,日常开发也别动辄 deploy——本地联调用 install 就够了,远程仓库里堆满未验证的版本只会污染战友的缓存。

💡 关键直觉:把命令输出当成"证据链"收集。出错时先完整截取从第一条 [ERROR] 到 BUILD FAILURE 的片段,而不是凭记忆复述报错。诊断依赖战争时,这段日志往往就是第一手现场。

本节要点回顾

  • 六命令主线:clean 清场、compile 编译、test 验证、package 成品、install 入本地库、deploy 上远程库,后者包含前者的工作;
  • clean 纪律:本地出包必带 clean,防止过期类文件制造"改而不生效"的假象;
  • 四参数战况:-DskipTests 提速验证、-U 强制刷新快照、-o 离线断网作战、-pl 加 -am 选择性构建;
  • 输出即战报:[ERROR] 与 reactor 摘要是定位起点,-e 与 -X 负责下钻;
  • install 与 deploy 的边界:本机可见与全队可见,错用会造成"我好了你们都没好"的错位。

命令频道表已经齐了,但应急作战还缺最关键的一环:依赖出事时,用什么工具看清现场。下一节的 dependency:tree 与有效 POM,就是作战室的第一套勘查仪器。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U