doc/MAVEN_CENTRAL_PUBLISH.md
这个指南帮助你将项目自动发布到 Maven Central,并提供本地调试 GitHub Actions 的方法。
Maven Central 已迁移到新的门户系统:
io.github.carguo)如果已有 Kleopatra 生成的密钥:
# 导出私钥 (会提示输入密码)
gpg --armor --export-secret-keys YOUR_KEY_ID > private-key.asc
# 查看密钥 ID
gpg --list-secret-keys --keyid-format=long
# 将私钥转为 base64 (用于 GitHub Secrets)
$content = Get-Content private-key.asc -Raw
$bytes = [System.Text.Encoding]::UTF8.GetBytes($content)
[Convert]::ToBase64String($bytes) | Set-Clipboard
在你的 GitHub 仓库设置 Secrets (Settings → Secrets and variables → Actions):
| Secret 名称 | 说明 | 获取方式 |
|---|---|---|
MAVEN_CENTRAL_USERNAME | Maven Central 用户名 | 从 https://central.sonatype.com/ Account 页面获取 |
MAVEN_CENTRAL_PASSWORD | Maven Central 密码/Token | 从 https://central.sonatype.com/ 生成 User Token |
GPG_PRIVATE_KEY | GPG 私钥 (base64) | 使用上面的命令导出 |
GPG_PASSPHRASE | GPG 密钥密码 | 你的 GPG 密钥密码 |
重要: Maven Central 新系统建议使用 User Token 而非密码
打 tag 时自动发布:
git tag v1.0.0
git push origin v1.0.0
act 允许你在本地运行 GitHub Actions。
# 使用 Chocolatey
choco install act-cli
# 或使用 Scoop
scoop install act
# 或下载二进制文件
# https://github.com/nektos/act/releases
# 列出所有 workflows
act -l
# 运行特定 workflow (使用 workflow dispatch)
act workflow_dispatch -W .github/workflows/publish-maven-central.yml
# 使用 secrets (创建 .secrets 文件)
act -s MAVEN_CENTRAL_USERNAME=youruser -s MAVEN_CENTRAL_PASSWORD=yourpass
# 或使用 secrets 文件
# 创建 .secrets 文件:
# MAVEN_CENTRAL_USERNAME=youruser
# MAVEN_CENTRAL_PASSWORD=yourpass
# GPG_PASSPHRASE=yourpassphrase
act workflow_dispatch --secret-file .secrets
# 使用输入参数
act workflow_dispatch -W .github/workflows/publish-maven-central.yml --input version=1.0.0
# Dry-run (不实际执行)
act -n
# 使用更大的 Docker 镜像 (包含更多工具)
act -P ubuntu-latest=catthehacker/ubuntu:full-latest
# 详细日志
act -v
# 交互式 shell (workflow 失败时)
act workflow_dispatch --container-architecture linux/amd64 -s GITHUB_TOKEN=fake
# 重用 Docker 容器 (加快调试)
act --reuse
创建一个本地测试脚本 test-publish.ps1:
# test-publish.ps1
# 模拟 GitHub Actions 环境变量
$env:MAVEN_CENTRAL_USERNAME = "your-username"
$env:MAVEN_CENTRAL_PASSWORD = "your-password"
$env:GPG_PASSPHRASE = "your-gpg-passphrase"
# 可选: 导入 GPG 密钥
# gpg --import path/to/private-key.asc
# 测试构建和发布到本地
Write-Host "Testing build and publish to MavenLocal..."
./gradlew clean publishToMavenLocal
# 检查输出
$mavenLocalPath = "$env:USERPROFILE\.m2\repository"
Write-Host "Check artifacts at: $mavenLocalPath"
# 测试签名
Write-Host "`nTesting signing..."
./gradlew signReleasePublication
Write-Host "`nDone! Check the output above for errors."
不使用完整 workflow,分步测试:
# 1. 测试构建
./gradlew clean build
# 2. 测试发布到本地 (不需要凭证)
./gradlew publishToMavenLocal
# 3. 测试签名 (需要 GPG 设置)
$env:GPG_PASSPHRASE = "your-passphrase"
./gradlew signReleasePublication
# 4. 查看将要发布的内容
./gradlew publishToMavenLocal --dry-run
# 5. 查看所有发布任务
./gradlew tasks --group publishing
如果你想让现有模块使用新的 Maven Central 发布配置,替换 build.gradle 中的:
// 将
apply from: "$rootDir/gradle/publish.gradle"
// 替换为
apply from: "$rootDir/gradle/maven-central-publish.gradle"
或者同时支持两者:
// GitHub Packages
apply from: "$rootDir/gradle/publish.gradle"
// Maven Central
apply from: "$rootDir/gradle/maven-central-publish.gradle"
gpg --keyserver keyserver.ubuntu.com --send-keys YOUR_KEY_ID
gpg --keyserver keys.openpgp.org --send-keys YOUR_KEY_ID
act 的限制:
# 检查密钥
gpg --list-keys
# 测试签名
echo "test" > test.txt
gpg --sign test.txt
rm test.txt*
# 更新 act
choco upgrade act-cli
# 使用最新的 runner 镜像
act -P ubuntu-latest=catthehacker/ubuntu:full-latest
# 检查 Docker 是否运行
docker ps
原有的 mc.ps1 脚本仍然可用作备份方案。新的自动化流程本质上做了相同的事情:
区别在于 GitHub Actions 会自动完成所有步骤。