You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Maven/Gradle如何获取依赖发布日期并排序识别项目过时依赖

Maven/Gradle 依赖发布时间提取与老旧依赖识别方案

核心实现思路

不需要依赖第三方漏洞扫描接口,直接利用Maven/Gradle仓库规范自带的构件元数据,拉取每个已解析依赖的对应版本发布时间,完成排序后识别坐标迁移类的弃用依赖。

Maven 项目操作步骤

  • 先执行依赖解析命令,生成全量去重的依赖坐标清单:
    mvn dependency:tree -DoutputType=text -Dtokens=standard -DexcludeScope=test
    过滤掉测试范围、provided范围的临时依赖,拿到所有实际打包部署的GAV坐标列表
  • 对清单中的每个坐标,拉取对应远程仓库(含企业自建私服)下的maven-metadata.xml元数据文件,提取当前解析版本对应的发布时间戳。所有符合Maven仓库规范的服务端,都会在元数据中记录每个版本的正式发布时间,无需额外请求第三方服务
  • 将依赖坐标与对应的发布时间做映射,按时间戳从早到晚排序输出完整清单

Gradle 项目操作步骤

Gradle在解析依赖的过程中,会自动把构件的发布时间存在本地元数据缓存中,无需重复发送远程请求拉取。只需要在项目的构建脚本中注册一个极简任务:

tasks.register("sortedDependencyReleaseTime") {
    doLast {
        // 遍历运行时依赖的解析结果
        def dependencyList = configurations.runtimeClasspath.resolvedConfiguration.resolvedArtifacts.collect { artifact ->
            def moduleId = artifact.moduleVersion.id
            // 直接从本地缓存的元数据中读取发布时间戳
            def releaseTimestamp = artifact.repository.meta.getReleaseTime(moduleId)
            [coords: moduleId.toString(), releaseTime: releaseTimestamp]
        }
        // 按发布时间从旧到新排序
        def sortedList = dependencyList.sort { it.releaseTime }
        // 打印输出结果
        sortedList.each {
            println "${it.coords} 发布时间: ${new Date(it.releaseTime)}"
        }
    }
}

执行构建命令即可拿到排序后的完整清单:./gradlew sortedDependencyReleaseTime

坐标迁移类依赖的识别逻辑

针对类似Awaitility这类官方迁移坐标、但旧坐标无漏洞报告的场景,可直接通过排序结果定位问题,不依赖漏洞扫描的规则匹配:

  • 排序后优先查看发布时间超过3-5年未更新的老旧依赖(比如示例中2015年最后更新的com.jayway.awaitility:awaitility)
  • 提取老旧依赖的artifact名称,匹配同artifact在仓库内的最新归属groupId:如果发现同artifact下存在持续更新的新groupId(比如org.awaitility:awaitility从2020年开始持续迭代),即可直接判定原使用的旧坐标为已弃用的迁移前坐标
  • 这套逻辑完全适配企业内部依赖的检测场景:只要企业私服维护了规范的元数据,哪怕依赖没有公开漏洞记录,也能通过发布时间、坐标匹配完成识别,不会出现旧坐标“无漏洞”但实际已弃用的漏检问题

内容的提问来源于stack exchange,提问作者aSemy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.23 15:15:02