【最新】MavenCentral 发布流程

4,017 阅读6分钟

本文主要介绍如何将你的library上传到Maven Central中,防止其他小伙伴踩坑。

开发环境:

Android Studio:Arctic Fox

Gradle:7.0.2

gpg:2.2.28

和以前的Jcenter相比上传到Maven Central 的步骤繁琐了许多,主要分以下几个步骤

1) 注册Sonatype账号

2) 新建Project工单

3) 创建GPG签名

4)导入Maven上传脚本

5)提交上传

6)发布library

7) 其他说明

01 注册Sonatype账号

Maven Central是由Sonatype公司负责维护的,所以我们要使用Maven Central的话,首先需要注册Sonatype账号。

注册地址:issues.sonatype.org/secure/Dash…

注册成功之后牢记用户名和密码,后续还会用到。

02 新建Project工单

登录成功之后 点击新建

1.png

点击之后会弹出以下页面

企业微信截图_20211026091420.png

  1. 项目:选择 Community Support - Open Source Project Repository Hosting (OSSRH)
  2. 问题类型:选择 New Project
  3. 概要:可填写Library的名称,随意
  4. Group Id:填写你的域名,如果没有可以使用github.io ,需要注意的是这里的命名规则为一个域名的反向名称,如截图所示,这个group id 最后决定了library的具体连接,截图中的library最后的引入链接为:io.github.shiweibsw:bannerx:版本号
  5. Project UR: 填写项目的github地址;
  6. SCM url: 项目的git地址; 7.Already Synced to Central:选择No

最后点击新建,创建的工单会自动提交给工作人员

企业微信截图_20211026092643.png

工作人员审核后会在活动日志中给你回复,你需要按照回复要求做一些验证,审核时间的话大概几分钟。

企业微信截图_20211026092908.png

要求你在Github上创建一个名为OSSRH-74329的public 仓库,我们按照要求创建即可。 注意仓库一定要是 public

企业微信截图_20211026101702.png

创建完成之后你要回复工作人员已完成这一步

企业微信截图_20211026101811.png

等待工作人员回复(大概十几分钟),Maven仓库就已经可以使用了。

企业微信截图_20211026101922.png

Maven仓库的登录地址:s01.oss.sonatype.org ,点击右上角的login,用户名和密码就是上边申请的Sonatype账号的用户名和密码。到这里Maven仓库准备完毕。

3) 创建GPG签名

GPG签名主要是给上传的library使用,每个上传的library都需要进行签名后才可以,不同的library可以使用相同的签名文件,所以GPG密钥一般只需要申请一次即可。

下载GPG签名工具,下载地址:www.gnupg.org/download/ ,下载对应平台的文件这里已win为例。

企业微信截图_20211026102551.png

安装完成之后就可以创建GPG密钥了。

GPG提供的两种方式,一种是kleopatra 桌面工具,另一种是cmd命令行方式。kleopatra工具貌似在不同平台会有些兼容性问题,win10 下测试使用经常会卡死。。。,页面反应迟钝,建议还是使用命令行的方式。

输入 gpg --gen-key

企业微信截图_20211026103151.png

Real name 输入一个大于5个字符的字符串

企业微信截图_20211026104726.png

输入一个邮箱地址

企业微信截图_20211026104859.png

确认无误后输入O,回车,

在弹出的对话框中输入一个密码

企业微信截图_20211026105022.png

** 牢记这个密码,后续还用用到**

这样就生成好了一个key

企业微信截图_20211026105252.png

接下来我们需要把这个key上传到GPG服务器。

上传命令

gpg --keyserver hkp://keyserver.ubuntu.com --send-keys 4B51D588

注意命令中最后的 4B51D588 这个字符串替换成你刚刚申请的密码的后8位

企业微信截图_20211026110023.png

然后我们使用查询命令查询一下,只有能查询到的key才能是认为上传成功的。

企业微信截图_20211026110628.png

这样我们的key就上传成功了。

最后一步我们要导出这个私钥以便在上传时使用

导出命令

gpg -o E:/secring.gpg --export-secret-keys F4F56F89 这里导出到了E盘的根目录下,最后生成的是这个文件

企业微信截图_20211026111021.png

可以将这个文件放在工程中,注意在上传时记得忽略。

到这里GPG的操作全部完成。

4导入Maven上传脚本

这里我们直接使用下边这个开源插件,方便快捷。

https://github.com/vanniktech/gradle-maven-publish-plugin

  1. 项目的build.gradle 中要引入插件
dependencies {
   
    classpath 'com.vanniktech:gradle-maven-publish-plugin:0.18.0'
    // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files
}

2. library 中添加如下代码

plugins {
    id 'com.vanniktech.maven.publish'
}

allprojects {
    plugins.withId("com.vanniktech.maven.publish") {
        mavenPublish {
            sonatypeHost = "S01"
        }
    }
}

3)gradle.properties 文件中添加如下配置项

# sonatype新建时的那个group id
GROUP=io.github.shiweibsw      
# library的名字
POM_ARTIFACT_ID=bannerx
# library的版本号
VERSION_NAME=1.1.1

#以上这三个配置决定lelibrary最终的路径 io.github.shiweibsw:bannerx:1.1.1

# 下边POM这些配置替换成你的library参数即可。
POM_NAME=bannerx
POM_DESCRIPTION=A simple and handy Android banner library.
POM_INCEPTION_YEAR=2023
POM_URL=https://github.com/shiweibsw/bannerx/

POM_LICENSE_NAME=The Apache Software License, Version 2.0
POM_LICENSE_URL=https://www.apache.org/licenses/LICENSE-2.0.txt
POM_LICENSE_DIST=repo

POM_SCM_URL=https://github.com/shiweibsw/bannerx
POM_SCM_CONNECTION=scm:git:git://github.com/shiweibsw/bannerx.git
POM_SCM_DEV_CONNECTION=scm:git:ssh://github.com/shiweibsw/bannerx.git

# 开发者信息
POM_DEVELOPER_ID=shiweibsw
POM_DEVELOPER_NAME=KD
POM_DEVELOPER_URL=https://github.com/shiwebsw/

# GPG密钥后8位
signing.keyId=8DCD38AB
# 申请GPG密钥时的那个密码
signing.password=***
# GPG密钥路径
signing.secretKeyRingFile=../secring.gpg

# 登录maven 的账号密码,也就是最开始申请那个sonatype账号密码
mavenCentralUsername=***
mavenCentralPassword=***

2024-09-27 更新
不能再直接输入用户名和密码,改为令牌的方式,具体如何获取令牌参考如下:
https://blog.csdn.net/10km/article/details/139878254

5)提交发布

以上配置全部完成以后,打开Studio右侧导航栏的Gradle菜单,在 library中的Tasks列表下,双击publish命令。

企业微信截图_20211026112832.png

这里你可能会找不到Tasks列表,因为Tasks列表在4.2以后默认被关闭了。

打开 Settings->Experimental菜单的面板,将下面截图的选项改为未选中。

企业微信截图_20211026113134.png

这样你就可以看到tasks列表了。

双击publish 如果出现下图,说明library已经上传成功了

企业微信截图_20211026113402.png

但是到这里我们的library还不能下载,因为我们的library还没有发布出去。

6 发布library

回到我们上边登录的maven仓库,点击右侧的Staging Repositories,会看到我们刚刚提交的library。

企业微信截图_20211026113838.png

点击选中可以看到详情。

企业微信截图_20211026114053.png

确认无误后点击close按钮

企业微信截图_20211026114136.png

直接点击Confirm

企业微信截图_20211026114150.png

然后多刷新几次,会发现Release按钮变成了可点击状态。点击Release 后再次Confirm

企业微信截图_20211026114322.png

这样你的Library就发布成功了。

等待大概十几分钟的样子,在welcome页面查询下你的library

企业微信截图_20211026114532.png

如果能查询到,恭喜你,Library发布成功了!

项目中直接引用即可

dependencies {
    implementation 'io.github.shiweibsw:bannerx:1.0.0'
}

7 其他说明

1) 版本更新

每次更新版本只需要更改 gradle.properties 中的 VERSION_NAME 即可,然后重新publish,后续操作一样。

2)创建不同的library

如果你的另一个新library也需要发布,并且新library的 group id和当前的相同,就不用再从第一步开始了,直接从第四步引入插件开始即可。

参考链接:

guolin.blog.csdn.net/article/det…

mp.weixin.qq.com/s/FVR6_zMp5…

最后推荐一下新完成的library :Bannerx

一个 支持图片,视频以及图片视频混合轮播,支持自定义Item,自定义指示器,自定义切换动画以及自定义视频播放引擎的轮播组件。

github地址:github.com/shiweibsw/b…