发布库到Maven Central完整指南

425 阅读2分钟

前置条件

  1. 准备一个有效域名(用于命名空间认证)
  2. 安装gpg工具(macOS可通过brew install gpg安装)

一、注册Maven Central账号

1.1 账号注册

访问 Sonatype官网,使用GitHub或Google账号快捷登录

1.2 命名空间申请

  1. 进入命名空间管理页
  2. 输入反向域名格式的命名空间(如域名cyclops.top需填写top.cyclops
  3. 点击【Submit】提交申请

1.3 命名空间验证

  1. 在弹出窗口中获取验证字符串(如qilqixggnp
  2. 登录您的DNS服务商控制台(以阿里云为例):
    • 选择目标域名
    • 添加TXT记录:
      • 记录类型:TXT
      • 主机记录:@(主域名,根据实际情况填写二级目录)
      • 记录值:验证字符串
  3. 返回Sonatype点击【Verify】
  4. 等待约10分钟DNS生效后刷新验证状态

1.4 生成访问凭证

  1. 进入账号管理页面
  2. 点击【Generate User Token】生成凭证(账号密码后续配置使用)
  3. 重要提示:重新生成会失效旧凭证

二、配置GPG签名

2.1 生成密钥对

gpg --gen-key
  • 密钥类型建议选择默认(直接回车)
  • 设置有效期(建议3年:3y
  • 输入姓名和邮箱
  • 设置保护密码(请牢记)

2.2 查看密钥ID

gpg --list-keys

示例输出:

pub   ed25519 2025-04-25 [SC] [有效至:2028-04-24]
      5BB2BB19880821744E4A6B0B765B551B51147F35  # ← 密钥ID
uid           [ultimate] Your Name <your.email@example.com>
sub   cv25519 2025-04-25 [E]

2.3 发布公钥

选择以下任一方式上传至密钥服务器:

方式一:命令行上传

gpg --keyserver keys.openpgp.org --send-keys YOUR_KEY_ID

方式二:网页上传

  1. 导出公钥文件:
gpg --export -a "Your Name" > public-key.asc
  1. 访问 keys.openpgp.org 上传文件

三、Gradle项目配置

3.1 添加发布插件

gradle/libs.versions.toml中配置:

[versions]
vanniktechMavenPublish = "0.31.0"

[plugins]
vanniktech-maven-publish = { id = "com.vanniktech.maven.publish", version.ref = "vanniktechMavenPublish" }

3.2 应用插件配置

模块级build.gradle.kts

plugins {
    alias(libs.plugins.vanniktech.maven.publish)
}

mavenPublishing {
    publishToMavenCentral(SonatypeHost.CENTRAL_PORTAL)
    signAllPublications()
    
    coordinates("top.cyclops", "knit", "0.0.1")  # 按实际修改
    
    pom {
        name = "Knit"
        description = "KotlinPoet DSL Enhancement"
        url = "https://github.com/cyclops-top/knit"
        licenses {
                license {
                    name = "Apache-2.0"
                    url = "https://spdx.org/licenses/Apache-2.0.html"
                }
            }
    
		developers {
			developer {
				id = "cyclops-top/knit"
				name = "xxxx"
				url = "https://www.cyclops.top"
			}
		}
		scm {
			url = "https://github.com/cyclops-top/knit"
			connection = "scm:git:git@github.com:cyclops-top/knit.git"
			developerConnection = "scm:git:ssh://git@github.com:cyclops-top/knit.git"
		}
    }
}

四、凭证配置

~/.gradle/gradle.properties中添加:

# Sonatype凭证
mavenCentralUsername=生成的UserToken账号
mavenCentralPassword=生成的UserToken密码

# GPG配置(使用密钥ID后8位)
signing.keyId=51147F35  
signing.password=密钥保护
# 如果没有secring.gpg使用指令gpg --keyring secring.gpg --export-secret-keys > ~/.gnupg/secring.gpg
signing.secretKeyRingFile=/Users/yourname/.gnupg/secring.gpg 

五、发布与验证

  1. 执行发布命令:
./gradlew publishAllPublicationsToMavenCentralRepository
  1. 登录Sonatype控制台检查制品
  2. 首次发布需人工审核(约2工作日)

注意事项

  1. DNS验证可能需要等待最长72小时
  2. GPG密钥需妥善保管,建议备份~/.gnupg目录
  3. 发布后24小时内需完成人工审核,否则制品会被删除
  4. 版本号必须遵循语义化版本规范(SemVer)