使用 Gradle签名依赖项验证时更新依赖项的步骤是什么?

问题描述

下面的链接中有一个关于如何使用 Gradle 设置依赖项验证的优秀指南:

https://docs.gradle.org/current/userguide/dependency_verification.html

简而言之,初始设置就像运行以下引导命令一样简单:

./gradlew --write-verification-Metadata pgp,sha256

但是没有提供之后要做什么的步骤,例如当您需要更新依赖项时。

您是否希望每次更新依赖项时都再次运行 bootstrap 命令?这是不安全的,因为 gradle 文档,如果出现问题,它将添加一个忽略列表值:

“如果由于某种原因,在生成过程中验证失败,Gradle 将自动生成一个被忽略的密钥条目,但警告您必须绝对检查发生了什么。”

或者您是否应该手动更新 gradle/verification-Metadata.xml 文件,如果是这样,执行此操作的步骤是什么?

期待有人解释在使用 Gradle 依赖项验证时更新依赖项的预期流程。

解决方法

如果您更新依赖项,那么依赖项验证将因为更新的依赖项而失败——正如预期的那样。您将获得如下控制台日志(此处为添加的 Gradle 插件或更改的插件版本):

A problem occurred configuring root project 'my-test'.
> Dependency verification failed for configuration ':classpath'
  3 artifacts failed verification:
    - de.undercouch.download.gradle.plugin-4.1.1.pom (de.undercouch.download:de.undercouch.download.gradle.plugin:4.1.1) from repository Gradle Central Plugin Repository
    - gradle-download-task-4.1.1.jar (de.undercouch:gradle-download-task:4.1.1) from repository Gradle Central Plugin Repository
    - gradle-download-task-4.1.1.pom (de.undercouch:gradle-download-task:4.1.1) from repository Gradle Central Plugin Repository
  If the artifacts are trustworthy,you will need to update the gradle/verification-metadata.xml file by following the instructions at https://docs.gradle.org/7.1/userguide/dependency_verification.html#sec:troubleshooting-verification
  
  Open this report for more details: file:///home/chriki/my-test/build/reports/dependency-verification/at-1625085802054/dependency-verification-report.html

如果您随后打开上述 HTML 报告,您将看到如下所示的表格:

模块 神器 问题
de.undercouch.download:de.undercouch.download.gradle.plugin:4.1.1 de.undercouch.download.gradle.plugin-4.1.1.pom 验证元数据中缺少校验和

(原始表格更好,并且具有可显示更多详细信息的可点击列。)

此外,HTML 报告包含以下“疑难解答”部分:

请仔细查看上面报告的错误。单击错误说明附近的图标,了解有关如何修复特定问题的信息。建议您手动编辑验证文件。但是,如果您确信这些是误报,Gradle 可以通过生成缺失的验证元数据来帮助您。在这种情况下,您可以使用以下命令行运行:

gradle --write-verification-metadata sha256 help

在任何情况下,您都必须查看此操作的结果

所以,是的,您可以在更新依赖项后再次运行 bootstrap 命令。然后它将通过将新的/更新的依赖项添加作为受信任来更新 verification-metadata.xml 文件。正如在实际的引导阶段一样,您必须查看结果 - 正如 HTML 报告中也明确指出的那样。

顺便说一句,Gradle 文档的 “Bootstrapping dependency verification” section 还指出 bootstrap 命令可用于更新(由我突出显示):

引导可用于从头开始创建文件,或者也可以使用新信息更新现有文件。