假设你已经注册好了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) 配置好GroupVersion信息

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即可发布到sonatypenexus

2) 登陆nexus

3) 在Staging Repositories中会有刚刚发布的jar包信息,点击close,验证完之后,再点击Release,即可发布完成

文章参考:https://zhuanlan.zhihu.com/p/164446166

最后修改:2022 年 03 月 05 日
如果觉得我的文章对你有用,请随意赞赏