本文主要介绍如何将你的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工单
登录成功之后 点击新建
点击之后会弹出以下页面
- 项目:选择 Community Support - Open Source Project Repository Hosting (OSSRH)
- 问题类型:选择 New Project
- 概要:可填写Library的名称,随意
- Group Id:填写你的域名,如果没有可以使用github.io ,需要注意的是这里的命名规则为一个域名的反向名称,如截图所示,这个group id 最后决定了library的具体连接,截图中的library最后的引入链接为:io.github.shiweibsw:bannerx:版本号
- Project UR: 填写项目的github地址;
- SCM url: 项目的git地址; 7.Already Synced to Central:选择No
最后点击新建,创建的工单会自动提交给工作人员
工作人员审核后会在活动日志中给你回复,你需要按照回复要求做一些验证,审核时间的话大概几分钟。
要求你在Github上创建一个名为OSSRH-74329的public 仓库,我们按照要求创建即可。 注意仓库一定要是 public
创建完成之后你要回复工作人员已完成这一步
等待工作人员回复(大概十几分钟),Maven仓库就已经可以使用了。
Maven仓库的登录地址:s01.oss.sonatype.org ,点击右上角的login,用户名和密码就是上边申请的Sonatype账号的用户名和密码。到这里Maven仓库准备完毕。
3) 创建GPG签名
GPG签名主要是给上传的library使用,每个上传的library都需要进行签名后才可以,不同的library可以使用相同的签名文件,所以GPG密钥一般只需要申请一次即可。
下载GPG签名工具,下载地址:www.gnupg.org/download/ ,下载对应平台的文件这里已win为例。
安装完成之后就可以创建GPG密钥了。
GPG提供的两种方式,一种是kleopatra 桌面工具,另一种是cmd命令行方式。kleopatra工具貌似在不同平台会有些兼容性问题,win10 下测试使用经常会卡死。。。,页面反应迟钝,建议还是使用命令行的方式。
输入 gpg --gen-key
Real name 输入一个大于5个字符的字符串
输入一个邮箱地址
确认无误后输入O,回车,
在弹出的对话框中输入一个密码
** 牢记这个密码,后续还用用到**
这样就生成好了一个key
接下来我们需要把这个key上传到GPG服务器。
上传命令
gpg --keyserver hkp://keyserver.ubuntu.com --send-keys 4B51D588
注意命令中最后的 4B51D588 这个字符串替换成你刚刚申请的密码的后8位
然后我们使用查询命令查询一下,只有能查询到的key才能是认为上传成功的。
这样我们的key就上传成功了。
最后一步我们要导出这个私钥以便在上传时使用
导出命令
gpg -o E:/secring.gpg --export-secret-keys F4F56F89
这里导出到了E盘的根目录下,最后生成的是这个文件
可以将这个文件放在工程中,注意在上传时记得忽略。
到这里GPG的操作全部完成。
4导入Maven上传脚本
这里我们直接使用下边这个开源插件,方便快捷。
https://github.com/vanniktech/gradle-maven-publish-plugin
- 项目的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命令。
这里你可能会找不到Tasks列表,因为Tasks列表在4.2以后默认被关闭了。
打开 Settings->Experimental菜单的面板,将下面截图的选项改为未选中。
这样你就可以看到tasks列表了。
双击publish 如果出现下图,说明library已经上传成功了
但是到这里我们的library还不能下载,因为我们的library还没有发布出去。
6 发布library
回到我们上边登录的maven仓库,点击右侧的Staging Repositories,会看到我们刚刚提交的library。
点击选中可以看到详情。
确认无误后点击close按钮
直接点击Confirm
然后多刷新几次,会发现Release按钮变成了可点击状态。点击Release 后再次Confirm
这样你的Library就发布成功了。
等待大概十几分钟的样子,在welcome页面查询下你的library
如果能查询到,恭喜你,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…
最后推荐一下新完成的library :Bannerx
一个 支持图片,视频以及图片视频混合轮播,支持自定义Item,自定义指示器,自定义切换动画以及自定义视频播放引擎的轮播组件。