smart-sugar:tree -Dsugar.dump=report.json用法
smart-sugar:tree -Dsugar.dump=report.json
= “只执行 Smart-Sugar 的 tree goal,并把解析好的依赖树 JSON 同步写进 report.json”。
下面给出一步到位的使用方法、常见选项以及执行后你能得到什么。
1. 前提检查
- POM 里已经声明了插件(跟你截图一样):
<plugin>
<groupId>com.cdfdta.sinka</groupId>
<artifactId>smart-sugar-maven-plugin</artifactId>
<version>1.7-RC3</version>
</plugin>
- 本地或私服能下载到
smart-sugar-maven-plugin-1.7-RC3.jar
- 你至少跑过一次
mvn dependency:resolve
,保证依赖可解析
2. 在命令行执行
# 仅运行插件,不做 compile/test/package
mvn smart-sugar:tree -Dsugar.dump=report.json
解释
• smart-sugar:tree
—— 调用插件的 tree goal
• -Dsugar.dump=report.json
—— 把 JSON 写到 当前工作目录 下的 report.json
(相当于在 <configuration>
中临时加 <dumpFile>report.json</dumpFile>
)
如果想把文件放到固定位置用绝对路径,例如:
mvn smart-sugar:tree -Dsugar.dump=/tmp/my-deps-$(date +%F).json
3. 典型输出
[INFO] --- smart-sugar-maven-plugin:1.7-RC3:tree (default-cli) @ demo ---
[INFO] Building dependency graph ...
[INFO] Tree JSON dumped to /Users/alice/work/demo/report.json <-- 关键行
[INFO] -----------------------------------------------------------------
[INFO] BUILD SUCCESS
此时 report.json 已经在磁盘,可立即打开或送到后续流水线步骤。
4. 多模块项目怎么做?
Smart-Sugar 的 tree goal 默认带 @aggregator
,只有在 根 pom 执行时才会生成一份聚合后的树:
# 在最外层(含 <modules> 的那个目录)执行
mvn smart-sugar:tree -Dsugar.dump=all-modules.json
如果你想分别为每个子模块输出 JSON,可在子模块 POM 里再声明插件(或用 -pl
指定):
mvn -pl module-a smart-sugar:tree -Dsugar.dump=module-a.json
5. 把结果 JSON 给谁用?
• 本地排查:用 VS Code 的 JSON 预览或 online visualizer
• 流水线制品:artifacts: { paths: report.json }
(GitLab CI 举例)
• 后续脚本解析:
import json, sys
with open('report.json') as f:
data = json.load(f)
for a in data['artifacts']:
print(a['ga'], a['scope'])
6. 常见疑问
Q1 文件没生成?
① 检查拼写:sugar.dump
而非 sugar.dumpFile
② 确认写权限、路径不存在非法字符
③ 版本 ≥ 1.7-RC2(RC1 之前无该参数)
Q2 同时还想上传到服务器?
只要在 POM <url>
里保留服务端地址即可。插件会 先写文件再上传,两者兼得。
Q3 想把 JSON 写到 target/
目录?
mvn smart-sugar:tree -Dsugar.dump=${project.build.directory}/sugar.json
括号中的 Maven 变量会在执行时展开。
总结
• mvn smart-sugar:tree -Dsugar.dump=…
= 运行 Smart-Sugar 依赖解析,并把结果 JSON 落到你指定的文件。
• 适合在本地调试、CI 中产出制品、或自行做二次分析,无需依赖 Smart-Sugar Server。