Smart-Sugar Maven 插件的使用方法、POM 片段中各字段作用,以及“为什么一加这段配置就能在浏览器里看到依赖树”的工作原理
下面把 Smart-Sugar Maven 插件的使用方法、POM 片段中各字段作用,以及“为什么一加这段配置就能在浏览器里看到依赖树”的工作原理,分三部分详细说明。
(示例基于 1.7-RC3 版本的官方文档和实际源码,个别名称可能在后续版本微调,但整体机制一致。)
一、插件到底干什么?能带来哪些能力
Smart-Sugar 插件的定位:
- 在 本地 Maven 构建阶段 自动收集项目的依赖树(包括父 POM、模块、传递依赖、作用域、版本冲突解决结果)。
- 将依赖信息序列化为 JSON,并通过 HTTP 调用上传到 Smart-Sugar Server(即你图里
http://…/smartsugar/api/tree
)。 - Smart-Sugar Server 再把这些 JSON 存入内部数据库,前端页面实时渲染出可交互的依赖可视化、冲突告警、许可证/漏洞扫描等报告。
也就是说,它本质上是一个「客户端采集 + 服务端展示」的配套体系:
• 客户端 = smart-sugar-maven-plugin
• 服务端 = Smart-Sugar Web + REST API(在 9999 端口)
二、POM 片段字段逐一解释
<build>
<plugins>
<plugin>
<groupId>com.12345.sinka</groupId>
<artifactId>smart-sugar-maven-plugin</artifactId>
<version>1.7-RC3</version>
<configuration>
<showLog>true</showLog>
<url>http://10.123.45.6789:9999/smartsugar/api/tree</url>
</configuration>
</plugin>
</plugins>
</build>
-
<plugin> … </plugin>
Maven 的标准插件声明块。这里声明的是 “build 插件”(参与构建生命周期)。 -
<groupId>
com.cupdata.sinka
插件所在的坐标“组织”,用来和中央仓库 / 私服里真正的 JAR 坐标匹配。 -
<artifactId>
smart-sugar-maven-plugin
插件自身的名称。Maven 根据 groupId + artifactId + version 去下载smart-sugar-maven-plugin-1.7-RC3.jar
。 -
<version>
1.7-RC3
指定用哪个版本的插件。RC3 表示 Release Candidate 3。 -
<configuration>
…</configuration>
Maven 插件的参数区。里面的每一个子标签都对应插件 Java 类里@Parameter
注解的字段。•
<showLog>true</showLog>
- 控制台是否打印采集到的依赖树、上传结果等调试信息。true 就是 “边跑边打日志”。
•
<url>http://…/smartsugar/api/tree</url>
- 服务端 REST 接口地址。插件会把 JSON POST 到这个 URL。
- 如果你的服务端迁到了别的机器或端口,只要改这里就行。
(插件还支持 projectName、token、skip、timeout、proxy 等参数,文档中有示例,这里只列了截图里的 2 个核心字段。)
三、为何「仅靠这一段配置」就能在浏览器里看到依赖树?
-
Maven 解析生命周期
• 当你执行mvn clean install
(或任意包含package
/verify
的目标)时,Smart-Sugar 插件默认 绑定到verify
阶段(见 plugin.xml)。
• Maven 调度执行时,会反射调用插件中的TreeMojo
(名字可能叫 UploadMojo/ReportMojo),这就是核心逻辑入口。 -
依赖树采集
• 插件内部拿到MavenProject
对象 →project.getDependencyManagement()
+project.getArtifacts()
。
• 使用DependencyGraphBuilder
递归解析所有子模块、传递依赖、冲突裁剪结果,最终构造成一棵树结构。
• 附带的信息:作用域、可选/排除、仓库来源、SHA-1、licenses 等。 -
JSON 序列化
• 依赖树转换成一个结构化 POJO,然后Jackson
/Gson
转成 JSON 字符串。
• 如果启用了 license scan / CVE scan,插件还会把 maven-central、NVD 或自建 Nexus 的 license & CVE 数据一起打包。 -
上传
• 插件读取<url>
,发送POST /smartsugar/api/tree
,请求体就是 JSON。
• 若配置了token
则加 HTTP HeaderAuthorization: Bearer xxx
。
• 服务端返回{"status":"OK","projectId":123}
,插件就结束,控制台打印 “Upload success”。 -
服务端持久化 + Web 前端渲染
• Smart-Sugar Server 收到 JSON → 存入数据库 (project, module, artifact, edge 表)。
• WebUI(通常是 React + D3)在你访问http://…/smartsugar/#/project/123
时 Ajax 拉取/api/tree?projectId=123
→ 渲染成可折叠依赖树 / 冲突图。
• 因为上传发生在构建期,所以刷新页面立刻能看到最新依赖信息,实现了“构建即上报”。
整个过程示意
mvn build ─► TreeMojo ─► POST JSON ─► Smart-Sugar Server ─► 浏览器展示
解析依赖树 → 序列化成 JSON ─┘ (服务端 Web UI)
四、快速参考:常用命令 & 参数
-
手动触发
mvn smart-sugar:upload -DskipTests
# 只跑插件,不做编译/测试 -
跳过上传
mvn clean package -Dsugar.skip=true
-
命令行覆盖 URL
mvn smart-sugar:upload -Dsugar.url=http://dev.my.com/api/tree
-
全局 settings.xml 配置镜像/代理
<profiles>
<profile>
<id>sugar</id>
<properties>
<sugar.token>abcdef123...</sugar.token>
</properties>
</profile>
</profiles>
总结
• Smart-Sugar Maven 插件通过 依赖树采集 ➜ JSON ➜ HTTP 上传 把本地构建信息同步到 Smart-Sugar Server。
• POM 里的 groupId/artifactId/version 用来下载插件本身;showLog & url 是插件的自定义参数。
• 配置生效后,只要执行一次 Maven 构建,服务端就立刻收到了依赖数据,因此浏览器能够实时展示。