假设你已经注册好了Sonatype账号并完成了域名验证
1、配置gpg
1) 下载并安装gpg4
2) 然后打开cmd,运行
gpg --generate-key然后会输出
pub   ed25519 2022-03-05 [SC] [expires: 2024-03-04]
      B4A09ACFCEB5B540ABF2F06976F913E8C89FC3A2
uid                      kuku <xx@gmail.com>
sub   cv25519 2022-03-05 [E] [expires: 2024-03-04]查看已经生成的密钥,可以看到刚才生成的密钥
gpg -k其中B4A09ACFCEB5B540ABF2F06976F913E8C89FC3A2为密钥指纹,后8位C89FC3A2为密钥的KeyId,后续在 Gradle 配置中将会使用到
3) 导出刚才创建的私钥
gpg --export-secret-keys [密钥指纹] > private-key.gpg将导出之后的private-key.gpg放置到项目目录,方便下一步的配置使用
4) 然后把公钥上传至公钥服务器
gpg --keyserver keyserver.ubuntu.com --send-keys [密钥指纹]注意:http://keyserver.ubuntu.com 为公钥服务器的地址,Maven Central 在校验签名是会从公钥服务器拉取。Maven Central 支持的公钥服务器地址有三个 pool.sks-keyservers.net、keyserver.ubuntu.com 、keys.gnupg.net。如果一个地址访问失败,替换成换成其中任意一个都是可以的。
2、配置Gradle
1) 配置好Group和Version信息
group = "me.kuku"
version = "0.3.12"2) 配置插件
plugins {
    `maven-publish`
    signing
}3) 编写配置文件
在项目根目录创建一个文件,例如nexus.properties,在其中配置好Sonatype的账号以及密码
nexus.sonatype.username=
nexus.sonatype.password=4) 然后在gradle中读取其信息,publishing如下:
val sourcesJar by tasks.registering(Jar::class) {
    from(sourceSets["main"].allSource)
    archiveClassifier.set("sources")
}
val docJar by tasks.registering(Jar::class) {
    archiveClassifier.set("javadoc")
}
val properties = Properties()
properties.load(File("nexus.properties").inputStream())
publishing {
    publications {
        create<MavenPublication>("maven") {
            artifact(sourcesJar)
            artifact(docJar)
            artifactId = "utils"
            pom {
                name.set("utils")
                description.set("my utils")
                url.set("https://github.com/kukume/utils")
                licenses {
                    license {
                        name.set("The Apache License, Version 2.0")
                        url.set("http://www.apache.org/licenses/LICENSE-2.0.txt")
                    }
                }
                developers {
                    developer {
                        id.set("kuku")
                        name.set("kuku")
                        email.set("kuku@kuku.me")
                    }
                }
                scm {
                    connection.set("scm:git:git://github.com/kukume")
                    developerConnection.set("scm:git:ssh://github.com/kukume")
                    url.set("https://github.com/kukume")
                }
            }
            from(components["java"])
        }
    }
    repositories {
        maven {
            url = uri("https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/")
            credentials {
                username = properties.getProperty("nexus.sonatype.username")
                password = properties.getProperty("nexus.sonatype.password")
            }
        }
    }
    signing {
        sign(publishing.publications)
    }
}
5) 在gradle.properties中添加
# keyId 为上一步 GPG 密钥所包含的。
signing.keyId=[签名 keyId]
signing.password=[签名 password]
# secretKeyRingFile 为上一步导出的签名路径
signing.secretKeyRingFile=[签名的相对路径 例:secret.gpg]3、发布
1) 运行gradle clean publish即可发布到sonatype的nexus
2) 登陆nexus
3) 在Staging Repositories中会有刚刚发布的jar包信息,点击close,验证完之后,再点击Release,即可发布完成