开源项目
ben-manes/gradle-versions-plugin avatar
ben-manes/gradle-versions-plugin

gradle-versions-plugin 评测:依赖更新报告,只报告不修改

用于发现依赖项更新的 Gradle 插件。 Gradle 版本插件 该插件本着 Maven 版本插件的精神,报告您的构建的哪些依赖项、插件和 Gradle 本身有更新的版本可用。

4,085 个 Star204 个 ForkGroovyApache-2.0
GitHub

秒懂

它是什么?
gradle-versions-plugin 是一个 Gradle 插件,用于发现依赖、插件和 Gradle 本身的新版本。它只生成报告,不修改构建文件,适合需要手动控制升级过程的团队。
适合谁用?
适合需要定期检查依赖更新、但希望保留手动升级决策权的团队。它不修改构建文件,只输出报告,因此风险低,适合集成到 CI 流程中。
能商用吗?
可以。Apache-2.0 是宽松许可证:你可以使用、修改并销售基于它的软件,只需保留版权和许可证声明。
还在维护吗?
在维护。仓库在最近一天内有新的提交。
用什么语言写的?
主要是 Groovy(依据 GitHub 的语言统计)。

以上回答依据项目的 GitHub 数据(最近同步于 2026年9月15日)和我们的分析,不构成法律意见。

开源项目深度解析

它解决什么问题

Gradle 构建中依赖版本分散在多个文件里,手动检查新版本既繁琐又容易遗漏。gradle-versions-plugin 提供一个 dependencyUpdates 任务,扫描项目声明的依赖、插件以及 Gradle 发行版本身,列出哪些有新版本可用。它不修改任何构建文件,只输出报告,因此适合那些需要升级控制权的团队。这个插件源于 Maven Versions Plugin 的思路,但针对 Gradle 做了适配。

工作机制:从声明到报告

插件通过 Gradle 的依赖解析机制工作。它读取项目声明的依赖坐标,然后向远程仓库查询可用版本。报告区分了几类状态:最新版本、超过最新版本(即声明版本高于最新版)、有升级、解析失败。解析失败的依赖会在 info 级别记录异常。报告还包含插件懒加载的依赖,比如 Kotlin 标准库和 jacoco、checkstyle、pmd 的工具版本。这些版本来自插件本身,而不是构建脚本,所以报告中可能出现构建脚本中不存在的版本,插件会额外打印一行说明。

运行与配置

推荐的应用方式是在 settings.gradle.kts 或 settings.gradle 中应用 settings 插件,这样能覆盖 settings 脚本中声明的插件和 buildscript 依赖。运行 ./gradlew dependencyUpdates 后,报告打印到控制台,同时写入 build/dependencyUpdates/report.txt。配置任务时,可以在根项目的 build.gradle.kts 中设置 revision = "release" 和 outputFormatter = "json"。如果没有根构建脚本,可以在 settings 脚本中通过 gradle.rootProject { tasks.withType(DependencyUpdatesTask::class.java).configureEach { ... } } 配置。

版本选择与稳定性过滤

插件提供 revision 属性控制报告的版本范围。默认可能包含里程碑版本,但通过设置 revision = "release" 可以只报告正式发布版。稳定性过滤器是关键配置,它防止预发布版本被当作更新建议。插件还尊重声明的边界,如果构建中显式排除了某个版本范围,报告不会推荐超出该范围的升级。对于 Gradle 本身,可以指定 release channel,还可以通过 Gradle versions API base URL 自定义版本源。

多项目与复合构建

多项目构建中,settings 插件自动覆盖所有子项目,无需在每个子项目单独配置。对于复合构建,插件也能处理,但报告方式有所不同。你可以配置共享任务设置,也可以为每个项目生成单独的报告。插件还支持隔离项目(isolated projects),这在 Gradle 8 中是一个新特性。如果你的项目结构复杂,建议先阅读文档中关于多项目构建的部分,确认报告输出是否符合预期。

限制与失败模式

这个插件只报告,不自动升级。如果你希望自动化更新,它不是你需要的工具。另一个限制是它报告的是解析后的版本,可能包含传递依赖,这些版本并非构建脚本显式声明。这可能导致报告中出现你从未直接引用的依赖。此外,如果依赖无法解析,插件会记录异常,但报告可能不完整。对于使用版本目录(version catalog)的项目,插件可以读取声明,但不会修改目录文件。

替代方案对比

与 gradle-versions-plugin 相比,Renovate 或 Dependabot 这类工具不仅检测新版本,还能自动创建升级 PR。它们通常作为外部服务运行,与 CI 系统集成,而 gradle-versions-plugin 是构建内的任务,输出本地报告。前者适合希望减少手动操作的团队,后者适合需要完全控制升级流程的团队。另一个区别是 Renovate 等工具会修改构建文件,而 gradle-versions-plugin 只读。

维护与许可证

项目采用 Apache-2.0 许可证,允许自由使用和修改。维护方面,最近的发布记录显示 v0.61.0、v0.60.0、v0.59.0 在短时间内连续发布,说明活跃维护。迁移文档提供了从 v0.54.0 及更早版本升级的指导,如果你使用旧版本,需要注意行为变化。插件兼容性需要查看文档中的 Compatibility 部分,因为不同 Gradle 版本可能需要不同插件版本。

编辑结论

适合需要定期检查依赖更新、但希望保留手动升级决策权的团队。它不修改构建文件,只输出报告,因此风险低,适合集成到 CI 流程中。不适合希望自动升级依赖的团队,这类需求应使用 Renovate 或 Dependabot 等工具。使用前应验证插件的稳定性过滤器和版本边界配置是否符合项目需求,并注意它报告的是解析后的版本,可能包含构建脚本中未显式声明的传递依赖。

官方来源

  1. Official README
  2. Project repository
  3. Release notes
社区笔记

社区笔记