相比于发布到中央仓库,其实有更简单的方法,如 Jitpack,无需域名认证、GPG签名,只需有代码仓库就可,约10分钟就可以完成接入。但本文的重点还是推送至中央仓库。
一、注册Sonatype账号申请创建项目 首先前往 Sonatype 提 issues 来创建一个项目(比较原始),没有账号的先行注册。
创建项目即是创建一个新的 groupId,提交完 issue 后,会有一个经办人要求你在域名下添加一个 TXT 记录,从而验证该域名属于你,添加完后,将 issue 重新打开,经办人验证通过后,这一步就告一段落。
对于很多小项目,不会有特定域的,也支持使用一些托管服务,如 Github,详情见 https://central.sonatype.org/publish/requirements/coordinates/
二、生成 GPG 此步骤用于生成对上传的文件进行签名的秘钥对。
此步骤也按文档操作: https://central.sonatype.org/publish/requirements/gpg/
根据系统,选择合适的安装包,安装 Gnupg Download
执行 gpg --gen-key
,按照指引,输入名称、邮箱、密码等信息生成一个key。
查看所生成的 key
1 2 3 4 5 6 7 $ gpg --list-keys /home/mylocaluser/.gnupg/pubring.kbx --------------------------------- pub rsa3072 2021-06-23 [SC] [expires: 2023-06-23] CA925CD6C9E8D064FF05B4728190C4130ABA0F98 uid [ultimate] Central Repo Test <central@example.com> sub rsa3072 2021-06-23 [E] [expires: 2023-06-23]
向服务器分发我们的公钥
1 gpg --keyserver keyserver.ubuntu.com --send-keys CA925CD6C9E8D064FF05B4728190C4130ABA0F98
最后导出私钥到文件中
1 gpg --export-secret-key CA925CD6C9E8D064FF05B4728190C4130ABA0F98 > secret.gpg
至此第二步完成
三、配置 Gradle 推送至仓库 此时已经可以准备推送了,还需配置下 gradle。
我使用 Kotlin 编写 gradle,即 build.gradle.kts 文件。
这里请不要参考 sonatype 的配置或其他博客,因为 gradle 版本千差各异,写法都略有去呗,仅参对应版本的考官方文档 ,我使用的为 Gradle7.2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 import org.jetbrains.kotlin.gradle.tasks.KotlinCompileplugins { id("maven-publish" ) id("signing" ) } group = "net.peihuan" version = "0.0.2-SNAPSHOT" java.sourceCompatibility = JavaVersion.VERSION_1_8 repositories { mavenCentral() } dependencies { } tasks.withType<KotlinCompile> { kotlinOptions { freeCompilerArgs = listOf("-Xjsr305=strict" ) jvmTarget = "1.8" } } tasks.withType<Test> { useJUnitPlatform() } tasks.getByName<Jar>("jar" ) { enabled = true archiveClassifier.set("" ) } java { withSourcesJar() withJavadocJar() } publishing { publications { create<MavenPublication>("mavenJava" ) { artifactId = "baidu-pan-starter" from (components["java" ]) versionMapping { usage("java-api" ) { fromResolutionOf("runtimeClasspath" ) } usage("java-runtime" ) { fromResolutionResult() } } pom { name.set("peihuanhuan/baidu-pan-starter" ) description .set("百度云盘 Java SDK" ) url.set("https://github.com/peihuanhuan/baidu-pan-starter" ) 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("peihuan" ) name.set("peihuan" ) email.set("1678167835@qq.com" ) } } scm { connection.set("scm:git://github.com/peihuanhuan/baidu-pan-starter.git" ) developerConnection.set("scm:git://github.com/peihuanhuan/baidu-pan-starter.git" ) url.set("git://github.com/peihuanhuan/baidu-pan-starter.git" ) } } } } repositories { maven { val releasesRepoUrl = "https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/" val snapshotsRepoUrl = "https://s01.oss.sonatype.org/content/repositories/snapshots/" url = uri(if (version.toString().endsWith("SNAPSHOT" )) snapshotsRepoUrl else releasesRepoUrl) credentials { username = findProperty("ossrhUsername" ).toString() password = findProperty("ossrhPassword" ).toString() } } } } signing { sign(publishing.publications["mavenJava" ]) }
最后需要在 ~/.gradle/gradle.properties
文件中配置 gpg 秘钥以及第一步注册 sonatype 时的用户名、密码,不存在文件就新建。
1 2 3 4 5 6 7 ossrhUsername=xxxxxx ossrhPassword=xxxxxxx # 公钥ID的后8 位 0 B372361CC1A9AE2452D43FDE8A99FE282B70849 signing.keyId=284 F61AF signing.password=xxxxxxxxxxx signing.secretKeyRingFile=/your/ path/secret.gpg
这里也可以不直接使用用户和密码,建议使用 accessToken 发布,依旧使用一开始创建的用户名、密码来登录 https://s01.oss.sonatype.org ,授权后将获得一组新的用户名密码。
一切已准备就绪,执行 gradle 中的 publish 方法
四、发布到中央仓库 如果上一步发布过了一个正式包,那么将在 sonatype 中看见:
选择该仓库后,先 Close,再 Release 发布,大功告成。
不久后你就会收到邮件:
Central sync is activated for net.peihuan. After you successfully release, your component will be available to the public on Central https://repo1.maven.org/maven2/, typically within 30 minutes, though updates to https://search.maven.org can take up to four hours.
30分钟后能同步到中央仓库,4小时才能被搜索到,耐心等待。
参考文档:
https://central.sonatype.org/publish/requirements/gpg/
https://docs.gradle.org/current/userguide/publishing_maven.html
https://help.sonatype.com/repomanager2/configuration/security-setup-with-user-tokens