包自己的项目上传到Maven中央仓库时报错:Missing Signature: ‘*.pom.asc’ does not exist for ‘*.pom’.
这个错误表明您在尝试将项目上传到Maven中央仓库时,缺少了POM文件的签名。Maven中央仓库要求您的项目的所有构件(包括JAR、POM等)都使用GPG签名。这是为了确保发布的构件的完整性和来源。
要解决此问题,您需要使用GPG工具为您的构件生成签名。以下是使用Maven插件maven-gpg-plugin
为项目生成签名并部署到Maven中央仓库的步骤:
-
确保您已经安装了GPG工具。如果没有,请访问GnuPG官方网站下载并安装。
-
生成GPG密钥对。打开命令行或终端,运行以下命令:
gpg --gen-key
按照提示操作,创建一个密钥对。记下生成的密钥ID。
- 将公钥上传到公钥服务器。运行以下命令,将
YOUR_KEY_ID
替换为您在第2步中生成的密钥ID:
gpg --keyserver hkp://pool.sks-keyservers.net --send-keys YOUR_KEY_ID
- 在您的Maven项目的
pom.xml
文件中,添加maven-gpg-plugin
插件。将以下代码片段添加到<build>
部分的<plugins>
内:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<version>1.6</version>
<executions>
<execution>
<id>sign-artifacts</id>
<phase>verify</phase>
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
</plugin>
- 在您的
settings.xml
文件中(通常位于~/.m2/
目录下),添加GPG密钥ID和密码。将以下代码片段添加到<settings>
内,并使用您的密钥ID和密码替换YOUR_KEY_ID
和YOUR_KEY_PASSWORD
:
<profiles>
<profile>
<id>ossrh</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<gpg.executable>gpg</gpg.executable>
<gpg.keyname>YOUR_KEY_ID</gpg.keyname>
<gpg.passphrase>YOUR_KEY_PASSWORD</gpg.passphrase>
</properties>
</profile>
</profiles>
- 现在,当您运行
mvn clean deploy
命令时,Maven将使用GPG为您的构件生成签名,并将它们部署到Maven中央仓库。
这些步骤应该解决您在部署项目时遇到的“缺少签名”错误。如果您仍然遇到问题,请确保遵循了Maven中央仓库的部署要求。
忘记gpg.executable
和 gpg.keyname
如果您忘记了 gpg.executable
和 gpg.keyname
,请按照以下步骤操作:
-
找到 GPG 可执行文件:
对于 Linux 和 macOS 用户,GPG 可执行文件通常位于
/usr/bin/gpg
或/usr/local/bin/gpg
。您可以在终端中运行以下命令来查找 GPG 可执行文件的位置:which gpg
对于 Windows 用户,GPG 可执行文件通常位于 Gpg4win 安装目录下的
bin
文件夹中,例如C:\Program Files (x86)\GnuPG\bin\gpg.exe
。您可以在文件资源管理器中搜索gpg.exe
以找到正确的位置。 -
找到 GPG 密钥名称(Key ID):
要找到您的 GPG 密钥名称(Key ID),请运行以下命令:
gpg --list-secret-keys --keyid-format LONG
在命令输出中,您将看到类似于以下内容的行:
sec rsa4096/0x1234567890ABCDEF 2021-01-01 [SC]
在这个例子中,GPG 密钥名称(Key ID)是
0x1234567890ABCDEF
。请注意,您需要在密钥 ID 前加上0x
。
找到 gpg.executable
和 gpg.keyname
后,您可以在需要使用 GPG 的地方使用这些信息。