关于 maven-dependency-audit
maven-dependency-audit 是面向 Maven 项目维护者的依赖审计技能,提供更新检查、依赖树分析和漏洞扫描流程,并指导整理优先级明确的审计报告。
主要功能
- 01检查依赖与插件更新
- 02分析依赖树及版本冲突
- 03识别未使用依赖
- 04扫描依赖安全漏洞
- 05生成优先级审计报告
- 06提供版本更新策略
适用场景
- 01发布前检查 Maven 项目依赖
- 02定期发现过时或未使用的依赖
- 03安全公告发布后扫描漏洞
- 04定位传递依赖来源并处理冲突
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ decebals/ claude-code-java --skill maven-dependency-audit安装后在 Claude Code 中输入/maven-dependency-audit确认已加载。
附带文件README.md
详细介绍
Maven 依赖审计技能
审计 Maven 依赖的更新、漏洞和冲突。
何时使用
- 用户说“检查依赖”/“审计依赖”/“过时的依赖”
- 发布前
- 定期维护(建议每月一次)
- 安全公告发布后
审计工作流
- 检查更新 - 查找过时的依赖
- 分析依赖树 - 查找冲突和重复项
- 安全扫描 - 检查漏洞
- 报告 - 提供摘要和按优先级排序的操作建议
1. 检查过时的依赖
命令
mvn versions:display-dependency-updates
输出分析
[INFO] The following dependencies in Dependencies have newer versions:
[INFO] org.slf4j:slf4j-api ......................... 1.7.36 -> 2.0.9
[INFO] com.fasterxml.jackson.core:jackson-databind . 2.14.0 -> 2.16.1
[INFO] org.junit.jupiter:junit-jupiter ............. 5.9.0 -> 5.10.1
更新分类
| 类别 | 标准 | 操作 |
|---|---|---|
| 安全 | 新版本修复了 CVE | 尽快更新 |
| 主版本 | x.0.0 变更 | 查看变更日志,全面测试 |
| 次版本 | x.y.0 变更 | 通常安全,进行测试 |
| 补丁版本 | x.y.z 变更 | 安全,只需最少测试 |
也检查插件更新
mvn versions:display-plugin-updates
2. 分析依赖树
完整依赖树
mvn dependency:tree
筛选特定依赖
mvn dependency:tree -Dincludes=org.slf4j
查找冲突
查找:
[INFO] +- com.example:module-a:jar:1.0:compile
[INFO] | \- org.slf4j:slf4j-api:jar:1.7.36:compile
[INFO] +- com.example:module-b:jar:1.0:compile
[INFO] | \- org.slf4j:slf4j-api:jar:2.0.9:compile (omitted for conflict)
标记:
(omitted for conflict)- Maven 已解决版本冲突(omitted for duplicate)- 版本相同,没有问题- 同一库存在多个版本 - 可能导致运行时问题
分析未使用的依赖
mvn dependency:analyze
输出:
[WARNING] Used undeclared dependencies found:
[WARNING] org.slf4j:slf4j-api:jar:2.0.9:compile
[WARNING] Unused declared dependencies found:
[WARNING] commons-io:commons-io:jar:2.11.0:compile
3. 安全漏洞扫描
选项 A:OWASP Dependency-Check(推荐)
添加到 pom.xml:
<plugin>
<groupId>org.owasp</groupId>
<artifactId>dependency-check-maven</artifactId>
<version>9.0.7</version>
</plugin>
运行:
mvn dependency-check:check
输出:target/dependency-check-report.html 中的 HTML 报告
选项 B:Maven Dependency Plugin
mvn dependency:analyze-report
选项 C:GitHub Dependabot
如果使用 GitHub,请在仓库设置中启用 Dependabot 警报。
严重性级别
| CVSS 分数 | 严重性 | 操作 |
|---|---|---|
| 9.0 - 10.0 | 严重 | 立即更新 |
| 7.0 - 8.9 | 高 | 几天内更新 |
| 4.0 - 6.9 | 中 | 几周内更新 |
| 0.1 - 3.9 | 低 | 方便时更新 |
4. 生成审计报告
输出格式
## Dependency Audit Report
**Project:** {project-name}
**Date:** {date}
**Total Dependencies:** {count}
### Security Issues
| Dependency | Current | CVE | Severity | Fixed In |
|------------|---------|-----|----------|----------|
| log4j-core | 2.14.0 | CVE-2021-44228 | Critical | 2.17.1 |
### Outdated Dependencies
#### Major Updates (Review Required)
| Dependency | Current | Latest | Notes |
|------------|---------|--------|-------|
| slf4j-api | 1.7.36 | 2.0.9 | API changes, see migration guide |
#### Minor/Patch Updates (Safe)
| Dependency | Current | Latest |
|------------|---------|--------|
| junit-jupiter | 5.9.0 | 5.10.1 |
| jackson-databind | 2.14.0 | 2.16.1 |
### Conflicts Detected
- slf4j-api: 1.7.36 vs 2.0.9 (resolved to 2.0.9)
### Unused Dependencies
- commons-io:commons-io:2.11.0 (consider removing)
### Recommendations
1. **Immediate:** Update log4j-core to fix CVE-2021-44228
2. **This sprint:** Update minor/patch versions
3. **Plan:** Evaluate slf4j 2.x migration
常见场景
场景:发布前检查
# Quick check
mvn versions:display-dependency-updates -q
# Full audit
mvn versions:display-dependency-updates && \
mvn dependency:analyze && \
mvn dependency-check:check
场景:查明引入依赖的原因
mvn dependency:tree -Dincludes=commons-logging
场景:强制指定版本(解决冲突)
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>2.0.9</version>
</dependency>
</dependencies>
</dependencyManagement>
场景:排除传递依赖
<dependency>
<groupId>com.example</groupId>
<artifactId>some-library</artifactId>
<version>1.0</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
Token 优化
- 使用
-q(安静)标志减少输出 - 查找特定依赖时,使用
-Dincludes=groupId:artifactId进行筛选 - 分别运行命令并总结结果
- 不要粘贴完整依赖树,而应总结冲突
快速命令参考
| 任务 | 命令 |
|---|---|
| 过时的依赖 | mvn versions:display-dependency-updates |
| 过时的插件 | mvn versions:display-plugin-updates |
| 依赖树 | mvn dependency:tree |
| 查找特定依赖 | mvn dependency:tree -Dincludes=groupId |
| 未使用的依赖 | mvn dependency:analyze |
| 安全扫描 | mvn dependency-check:check |
| 更新版本 | mvn versions:use-latest-releases |
| 更新快照版本 | mvn versions:use-latest-snapshots |
更新策略
保守策略(生产环境推荐)
- 可自由更新补丁版本
- 更新次版本并进行基本测试
- 主版本需要迁移计划
激进策略(适用于积极开发)
# Update all to latest (use with caution!)
mvn versions:use-latest-releases
mvn versions:commit # or versions:revert
选择性策略
# Update specific dependency
mvn versions:use-latest-versions -Dincludes=org.junit.jupiter
评论
支持 Markdown