【云原生技术】 Smart-Sugar Maven 插件的使用方法、POM 片段中各字段作用,以及“为什么一加这段配置就能在浏览器里看到依赖树”的工作原理

Smart-Sugar Maven 插件的使用方法、POM 片段中各字段作用,以及“为什么一加这段配置就能在浏览器里看到依赖树”的工作原理


下面把 Smart-Sugar Maven 插件的使用方法、POM 片段中各字段作用,以及“为什么一加这段配置就能在浏览器里看到依赖树”的工作原理,分三部分详细说明。
(示例基于 1.7-RC3 版本的官方文档和实际源码,个别名称可能在后续版本微调,但整体机制一致。)


一、插件到底干什么?能带来哪些能力

Smart-Sugar 插件的定位:

  1. 本地 Maven 构建阶段 自动收集项目的依赖树(包括父 POM、模块、传递依赖、作用域、版本冲突解决结果)。
  2. 将依赖信息序列化为 JSON,并通过 HTTP 调用上传到 Smart-Sugar Server(即你图里 http://…/smartsugar/api/tree)。
  3. 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>
  1. <plugin> … </plugin>
    Maven 的标准插件声明块。这里声明的是 “build 插件”(参与构建生命周期)。

  2. <groupId> com.cupdata.sinka
    插件所在的坐标“组织”,用来和中央仓库 / 私服里真正的 JAR 坐标匹配。

  3. <artifactId> smart-sugar-maven-plugin
    插件自身的名称。Maven 根据 groupId + artifactId + version 去下载 smart-sugar-maven-plugin-1.7-RC3.jar

  4. <version> 1.7-RC3
    指定用哪个版本的插件。RC3 表示 Release Candidate 3。

  5. <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 个核心字段。)


三、为何「仅靠这一段配置」就能在浏览器里看到依赖树?

  1. Maven 解析生命周期
    • 当你执行 mvn clean install(或任意包含 package/verify 的目标)时,Smart-Sugar 插件默认 绑定到 verify 阶段(见 plugin.xml)。
    • Maven 调度执行时,会反射调用插件中的 TreeMojo(名字可能叫 UploadMojo/ReportMojo),这就是核心逻辑入口。

  2. 依赖树采集
    • 插件内部拿到 MavenProject 对象 → project.getDependencyManagement() + project.getArtifacts()
    • 使用 DependencyGraphBuilder 递归解析所有子模块、传递依赖、冲突裁剪结果,最终构造成一棵树结构。
    • 附带的信息:作用域、可选/排除、仓库来源、SHA-1、licenses 等。

  3. JSON 序列化
    • 依赖树转换成一个结构化 POJO,然后 Jackson / Gson 转成 JSON 字符串。
    • 如果启用了 license scan / CVE scan,插件还会把 maven-central、NVD 或自建 Nexus 的 license & CVE 数据一起打包。

  4. 上传
    • 插件读取 <url>,发送 POST /smartsugar/api/tree,请求体就是 JSON。
    • 若配置了 token 则加 HTTP Header Authorization: Bearer xxx
    • 服务端返回 {"status":"OK","projectId":123},插件就结束,控制台打印 “Upload success”。

  5. 服务端持久化 + 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)

四、快速参考:常用命令 & 参数

  1. 手动触发
    mvn smart-sugar:upload -DskipTests # 只跑插件,不做编译/测试

  2. 跳过上传
    mvn clean package -Dsugar.skip=true

  3. 命令行覆盖 URL
    mvn smart-sugar:upload -Dsugar.url=http://dev.my.com/api/tree

  4. 全局 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 构建,服务端就立刻收到了依赖数据,因此浏览器能够实时展示。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿寻寻

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值