假设你已经注册好了Sonatype
账号并完成了域名验证
1、配置gpg
1) 下载并安装gpg4
2) 然后打开cmd
,运行
gpg --generate-key
然后会输出
pub ed25519 2022-03-05 [SC] [expires: 2024-03-04]
B4A09ACFCEB5B540ABF2F06976F913E8C89FC3A2
uid kuku <[email protected]>
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("[email protected]")
}
}
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
,即可发布完成