Gradle uploadArchives 任务无法读取密钥

Gradle uploadArchives task unable to read secret key

我创建了一个 gradle 项目并且一切正常,但是当我尝试上传到我的 Maven 存储库时,我收到以下 Gradle 错误:

FAILURE: Build failed with an exception.

* What went wrong:
Could not evaluate onlyIf predicate for task ':library:signArchives'.
> Unable to read secret key from file: C:\Users\ideal\pubring.gpg (it may not be a PGP secret key ring)

我按照说明 at Sonatype 生成了密钥,然后将其从生成的位置复制到上面列出的位置。我还将 public 密钥发布到 MIT 密钥存储库。我的用户目录中的 gradle.properties 文件包含以下与钥匙串相关的条目:

signing.keyId=MY_KEY_ID
signing.password=MY_KEY_PASSWORD
signing.secretKeyRingFile=C:\Users\ideal\pubring.gpg

这是在 Windows 平台上。我尝试搜索错误消息,但唯一出现的是相关插件的源文件。

问题是您正在使用 public 密钥,切换到通常名为 "secring.gpg" 的密钥。 所以在你的情况下它应该放在

C:\Users\ideal\secring.gpg

secring.gpg 文件已 removed in GPG 2.1

但是,GPG 仍然可以创建这样的文件:gpg --export-secret-keys -o secring.gpg

专业提示: 如果 Gradle 的 signing plugin 抱怨你在 signing.keyId=MY_KEY_ID 中的键太长,你肯定在使用40 个字符的指纹,但要求提供 8 个字符的 ID。那么你有三个选择:

  1. 您可以 configure GPG 通过设置 keyid-format 选项来显示 8 个字符 ID 而不是指纹。

    • a) 在 CLI 上显式定义此选项:gpg --list-keys --keyid-format short(感谢 tjheslin1!)
    • b) 或者通过 options file 隐式激活此选项(默认位置是 ~/.gnupg/gpg.conf)。
  2. 试试你 40 个字符指纹的最后 8 位数字。这是为懒惰的开发人员准备的 ;-)

GPG 2.1及以后版本可能不需要"secring.gpg"文件,可以用命令生成: "gpg --export-secret-keys -o \dir\secring.gpg"