gradle中对发布的jar进行数字签名需启用signing和maven-publish插件,绑定signing到mavenpublication,通过usegpgcmd()调用gpg为jar、sources jar、javadoc jar生成.asc签名文件,且须提前配置gpg密钥并上传公钥至密钥服务器。

Gradle 中对发布的 Jar 进行数字签名,需使用 signing 插件配合 maven-publish 插件,核心是为发布产物(如 JAR、sources JAR、Javadoc JAR)生成并附加 GPG 签名文件(.asc)。这在发布到 Maven Central 等合规仓库时是强制要求。
启用 signing 插件并关联 publication
在 build.gradle.kts 中,先应用插件,再将 signing 逻辑绑定到具体的 MavenPublication 上:
- 必须同时启用
maven-publish和signing插件 - signing 配置需明确指定要签名的 publication(例如
"myLibrary") - 不推荐在 signing 块中硬编码密钥信息;应通过 GPG agent 或环境变量提供凭据
示例配置:
`maven-publish`
signing
}
publishing {
publications {
create
from(components["java"])
// 其他 POM 配置略
}
}
repositories { /* 如 Nexus 或 Maven Central */ }
}
signing {
useGpgCmd()
sign(publishing.publications["myLibrary"])
}
确保所有发布产物都被签名
Maven Central 要求不仅主 JAR,还包括 -sources.jar 和 -javadoc.jar 都必须有对应 .asc 签名文件。Gradle 默认会自动为这些附属 artifact 签名,前提是它们被包含在 publication 的 from(components["java"]) 中。
- 检查是否已声明
withJavadocJar()和withSourcesJar() - 确认
publishing.publications["myLibrary"].artifacts列表中包含这三个文件 - 执行
./gradlew publish后,目标仓库目录下应出现:xxx.jar、xxx.jar.asc、xxx-sources.jar、xxx-sources.jar.asc等
配置 GPG 密钥与凭据
Gradle 不直接管理 GPG 密钥,而是调用系统 gpg 或 gpg2 命令。你需要提前完成以下准备:
- 安装 GPG 工具(macOS 可用
brew install gnupg;Windows 推荐 Gpg4win) - 生成密钥对:
gpg --full-generate-key,建议选择 RSA 4096 位、有效期设为永不过期或长期 - 导出公钥并上传至密钥服务器:
gpg --keyserver keyserver.ubuntu.com --send-keys YOUR_KEY_ID - 确保当前用户能无密码调用
gpg --list-secret-keys(若设了 passphrase,需配置 gpg-agent 缓存)
跳过签名或临时调试的方法
开发阶段可临时禁用 signing,避免每次构建都触发 GPG 提示:
- 在命令行加参数:
./gradlew publish -x signing - 或在
signing { }块中加条件判断:if (findProperty("signing.keyId") != null) { ... } - 注意:跳过 signing 将导致无法通过 Maven Central 同步校验











