Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >使用 Gradle 发布开源项目到 Maven Central

使用 Gradle 发布开源项目到 Maven Central

作者头像
星哥玩云
发布于 2022-07-04 02:44:09
发布于 2022-07-04 02:44:09
74800
代码可运行
举报
文章被收录于专栏:开源部署开源部署
运行总次数:0
代码可运行

使用过 Android Studio 的同学应该都会对 Gradle 这个强大的构建系统留下了深刻的印象,Gradle 可以方便地集成各种开源库,又能编写自动化脚本处理任务,大有取代 Maven 之势。 业余时间我有在维护一个开源项目,也收到了几个 PR 要求发布到 Maven Central 以供 Gradle 使用,所以自己摸索着找了些文章,终于把项目发布上去了。

1. 申请 Maven Central 发布权限

将你的项目主要信息放到 issue 里面就好了,其中 Group Id 要谨慎填写,申请通过后,你只能在你的 Group Id下发布项目。

创建完 issue 后,静候几天,通过了就会给你发邮件。 

2. 编写 Gradle 发布脚本

感谢 Chris Banes 大神提供的脚本,稍作修改,弄了一个我自己的版本。

https://github.com/SpecialCyCi/AndroidResideMenu/blob/master/maven_push.gradle

将上面的脚本放到项目的根目录下,然后到开源库所在的 module 目录,添加以下代码 build.gradle :

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
apply from: '../maven_push.gradle'

修改项目根目录下的gradle.properties,添加项目的信息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
VERSION_NAME=1.6
VERSION_CODE=8
POM_GROUP_ID=com.specyci
POM_DESCRIPTION=....
POM_URL=https://github.com/SpecialCyCi/AndroidResideMenu
POM_SCM_URL=https://github.com/SpecialCyCi/AndroidResideMenu
POM_SCM_CONNECTION=scm:git@github.com:SpecialCyCi/AndroidResideMenu.git
POM_SCM_DEV_CONNECTION=scm:git@github.com:SpecialCyCi/AndroidResideMenu.git
POM_LICENCE_NAME=The MIT License (MIT)
POM_LICENCE_URL=https://raw.githubusercontent.com/SpecialCyCi/AndroidResideMenu/master/LICENSE
POM_LICENCE_DIST=repo
POM_DEVELOPER_ID=specialcyci
POM_DEVELOPER_NAME=Special Leung
POM_INCEPTION_YEAR=2013

最后到开源库所在的 module 目录,添加编译信息到 gradle.properties :

POM_NAME=AndroidResideMenu POM_ARTIFACT_ID=residemenu POM_PACKAGING=aar

3. 下载 GPGTools,创建 Signing Key

Signing Key 可以看作是作者信息的一个签名,签名分为 public 和 private,其中 public key 要上传到keyservers.net 储存。

先在本地命令行生成 Signing Key :

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
➜  AndroidResideMenu git:(master) gpg --gen-key

Please select what kind of key you want:
   (1) RSA and RSA (default)
   (2) DSA and Elgamal
   (3) DSA (sign only)
   (4) RSA (sign only)
Your selection? 1
RSA keys may be between 1024 and 8192 bits long.
What keysize do you want? (2048)
Requested keysize is 2048 bits
Please specify how long the key should be valid.
         0 = key does not expire
      <n>  = key expires in n days
      <n>w = key expires in n weeks
      <n>m = key expires in n months
      <n>y = key expires in n years
Key is valid for? (0) 0
Key does not expire at all
Is this correct? (y/N) y

GnuPG needs to construct a user ID to identify your key.

Real name: Special Leung(Testing)
Email address: specialcyci+test@gmail.com
Comment: This is just a testing key.
You selected this USER-ID:
    "Special Leung(Testing) (This is just a testing key.) <specialcyci+test@gmail.com>"

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
You need a Passphrase to protect your secret key.

...
pub   2048R/8C1761A2 2015-01-24
      Key fingerprint = xxx
uid       [ultimate] Special Leung(Testing) (This is just a testing key.) <specialcyci+test@gmail.com>
sub   2048R/E32D1186 2015-01-24

然后把 public key 上传到 keyservers.net :

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ gpg --keyserver hkp://pool.sks-keyservers.net --send-keys 8C1761A2
gpg: sending key 8C1761A2 to hkp server pool.sks-keyservers.net

最后将 Signing Key 的信息填充到 ~/.gradle/gradle.properties :

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 查看 key 信息
➜  ~  gpg --list-secret-keys
/Users/special/.gnupg/secring.gpg # <- key 目录
---------------------------------
sec   2048R/8C1761A2 2015-01-24   # <- 8C1761A2 是 key id
uid                  Special Lenung(Testing) (This is just a testing key.) <specialcyci+test@gmail.com>
ssb   2048R/E32D1186 2015-01-24
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# ~/.gradle/gradle.properties

signing.keyId=8C1761A2
signing.password=password
signing.secretKeyRingFile=/Users/special/.gnupg/secring.gpg
nexuSUSErname=username
nexusPassword=password
4. 执行 Gradle 发布脚本
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
%GRADLE_HOME%/bin/gradle uploadArchives

如果版本名含有 SNAPSHOT 字串,项目将会上传到 snapshots 节点;如果要发布到 Maven Central 的正式库,去掉版本名中的 SNAPSHOT 就可以,SNAPSHOT 版本不需要进行第五步 Central Sync。

Snapshots 节点:https://oss.sonatype.org/content/repositories/snapshots

5. 激活 Maven Central Sync 进程

第 4 步成功了的话,就可以在 oss.sonatype.org (https://oss.sonatype.org/) 的 stagingRepositories 看到项目了,然后按下「Close」,准备发布项目。

成功 Close 了项目后,到第一步的 issue 地址,发个评论让工作人员给你开启 Sync 进程,这个一般一个工作日就有答复。

在工作人员回复可以之后,执行「Release」操作,没啥意外的话,两小时后就可以在 search.maven.org 搜到你的项目了。 

6. 结语

总的来说,发布还是挺方便的,人工审核可能会浪费点时间,偶尔还可能遇到些问题,不过 sonatype 还是很专业的,将你遇到的问题告诉他们之后,都可以得到一个有效的解决办法。

不过最近 Android Studio 把 jCentral 作为默认的节点了,也许下次就得折腾 jCentral 了。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
如何发布Jar包到Maven Central Repository
Maven Central 网站并不提供注册的功能,你需要到 Sonatype 网站上进行注册。而事实上,Sonatype 网站也没有直接提供一个注册链接。真正的注册入口在 issues tracker 上。一旦完成注册后,你需要创建包含待发布包信息的 issue。
lambeta
2018/08/17
2.8K0
如何发布Jar包到Maven Central Repository
Dev 日志 | 如何将 jar 包发布到 Maven 中央仓库
Maven 中央仓库并不支持直接上传 jar 包,因此需要将 jar 包发布到一些指定的第三方 Maven 仓库,比如:Sonatype OSSRH 仓库,然后该仓库再将 jar 包同步到 Maven ,本文详细记录整个发布、同步过程。
NebulaGraph
2019/12/12
1.1K0
Dev 日志 | 如何将 jar 包发布到 Maven 中央仓库
来开源吧!发布开源组件到 MavenCentral 仓库超详细攻略
小彭今天和群友讨论了一下学习方法的问题,觉得还挺感同身受的。有时候我们遇到不懂的地方,潜意识会产生厌恶和恐惧,大脑会驱使我们去学习和查看这个不懂的地方,结果有可能是陷入到另一个不懂的循环里,忘记了最初的目的。关于系统化学习和碎片化学习,你的想法是怎样的呢?评论区里告诉我吧。
用户9995743
2022/09/26
2.1K0
来开源吧!发布开源组件到 MavenCentral 仓库超详细攻略
Github开源Java项目(IJPay)上传到Maven Central Repository 方法详细介绍
之前IJPay Jar是上传到JitPack,但是有很多同学反馈说Jar无法下载。为了响应群众的号召,这次需要向中央仓库提交jar, 我们可以利用Sonatype OSSRH把Jar等资源提交给Maven的中央仓库。
Javen
2018/08/21
7810
Github开源Java项目(IJPay)上传到Maven Central Repository 方法详细介绍
使用Gradle部署jar包到Maven中央库
Maven作为目前Java界最好的Dependency管理系统,把jar包托管到Maven中央库,然后通过Maven Dependency使用是目前业界各种第三方库的普遍做法,如果,你想把自己开发的一些库分享给别人使用,也可以遵循这样的套路。Gradle可以看做是升级版的Maven,其使用了Maven最优秀的Dependency管理系统,但是,又规避了Maven的build pipeline的刻板和xml格式配置文件等缺点,可以说是目前Java界最好的构建工具。下面就来说说,如何使用Gradle把自己开发的jar包部署到Maven中央库中。
星哥玩云
2022/07/04
1K0
使用Gradle部署jar包到Maven中央库
Android Bintray、JCenter 替代方案MavenCentral
创建之后半个小时左右会收到一封邮件, 这里要求我在自己的GitHub中创建一个指定名称的仓库
聚优云惠
2022/08/19
2.3K0
手把手教你把Java SDK发布到中央仓库
写了个Java SDK(ava Library),想要让更多的猿媛使用,如何发布到中央仓库(Maven Central)呢?
许杨淼淼
2020/06/28
1.7K0
发布maven项目到中央仓库
用maven已经一段时间,有一些通用的可以开源的代码想放到公网的仓库中,以便可以随时使用。 注册Sonatype OSSRH 1:注册一个JIRA账号:https://issues.sonatype.
似水的流年
2019/12/05
7200
如何发布自己的项目到Maven中央仓库?
在Maven项目中,90%以上的jar包是通过pom文件直接从开源仓库中获取依赖jar包文件,然后在项目中进行集成使用。
程序新视界
2020/07/29
5.9K1
如何发布自己的项目到Maven中央仓库?
gradle构建android项目详解
1、用Gradle构建 1.1 工程结构 如图所示,这是一个不能更普通的Android的Gradle工程了。 根目录下面的settings.gradle当中主要是用来include子模块的,比如我
xiangzhihong
2018/02/01
2.4K0
gradle构建android项目详解
发布maven项目至中央仓库终极教程与疑难问题汇总解决帖
最近写了个maven项目想要打包上传到maven中央仓库方便开源调用,网上教程看了不少,坑也填了不少,在这里做一个详细的教程,让大家少花时间,快速高效的完成项目打包上传。
code2roc
2023/07/19
5910
发布maven项目至中央仓库终极教程与疑难问题汇总解决帖
再见JCenter,将你的开源库发布到MavenCentral上吧
关于JCenter废弃这件事情,相信许多朋友早就已经知道了。我在几个月前也专门写过一篇文章分析JCenter废弃事件的前前后后,感兴趣的朋友可以去阅读下这篇文章 浅谈JCenter即将被停止服务的事件 。
用户1158055
2021/08/20
1.8K0
再见JCenter,将你的开源库发布到MavenCentral上吧
提交本地jar到Maven中央仓库(Windows&码云gitee托管代码)的那些小事
https://issues.sonatype.org/secure/CreateIssue!default.jspa
小帅丶
2021/12/28
6700
提交本地jar到Maven中央仓库(Windows&码云gitee托管代码)的那些小事
我把自己的java库发布到了maven中央仓库,从此可以像Jackson、Spring的jar一样使用它了
关于maven中央仓库 作为一个java程序员,对maven中央仓库https://mvnrepository.com/自然是非常熟悉的,毕竟咱们的应用依赖的jar大部分都来自此处,如果您想把自己开发的java库也托管在上面,让大家像使用Jackson、Spring那样轻松简单的使用您的jar,就请随本文一起操作吧; 先看看效果,下图是我发布的java库在中央仓库的搜索结果: 前提条件 由于sonatype官方会要求您在github创建一个仓库(仓库名由sonatype官方指定,以此验证您是否有gith
程序员欣宸
2021/12/07
6790
我把自己的java库发布到了maven中央仓库,从此可以像Jackson、Spring的jar一样使用它了
如何把jar包发布到中央仓库
1、在网站https://issues.sonatype.org/secure/Dashboard.jspa注册一个账号(请记住对应的账号和密码,之后需要用到)
BUG弄潮儿
2022/06/30
6920
如何把jar包发布到中央仓库
jar包打入maven仓库中_maven打包引入外部jar包
我们知道,一个maven坐标由groupId,artifactId和version组成,后两者可以在pom中调整,而可以用在中央仓库的 groupId需要申请。由于 Maven 中央仓库由 sonatype 公司进行运营,所以我们首先需要注册一个sonatype账号,通过该账号去申请一个 groupId。
全栈程序员站长
2022/09/23
1K0
jar包打入maven仓库中_maven打包引入外部jar包
开源:上传 Jar 包至 Maven 中央仓库
最近我将服务发现组件开源了:cloud-discovery,分享一下 Jar 包上传中央仓库过程遇到的问题与总结。需要说明的是,在下面两篇文章中已经将步骤写的非常清楚了,本文主要记录的是我在操作过程中遇到的一些坑,以供参考。
杨同学technotes
2022/12/01
8510
Gradle 如何配置上传包到 OSSRH 仓库中
同时,你还需要在 C:\Users\yhu.gradle 文件夹中创建一个 gradle.properties 文件。
HoneyMoose
2020/12/28
7240
Gradle 如何配置上传包到 OSSRH 仓库中
如何提交自己的项目到Maven公共仓库 | 萌新学开源 02
在上一篇文章中,我介绍了自己的SpringBoot Starter项目,可以让我们使用注解的方式轻松地获取操作日志,并推送到指定数据源。
Rude3Knife的公众号
2021/12/13
2.3K0
如何提交自己的项目到Maven公共仓库 | 萌新学开源 02
如何发布Android Library到maven私有仓库
在我们的项目架构中,一定存在一些基础的模块,这些模块可以在多个app上通用,这种情况我们一般会将这些模块封装成Android Library统一维护,并上传到仓库方便其他小组使用。仓库可以选择如mavenCentral这类公开的仓库,但是我们一般选择搭建自己的maven私有仓库,比如:Sonatype Nexus。本文就一步步的教大家如何将Android Library发布到maven私有仓库。
BennuCTech
2021/12/10
1.7K0
如何发布Android Library到maven私有仓库
推荐阅读
相关推荐
如何发布Jar包到Maven Central Repository
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验