文档章节

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

specialcyci
 specialcyci
发布于 2015/01/24 14:16
字数 1158
阅读 6833
收藏 87

转载自我的博客:http://www.specyci.com/articles/17

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

1. 申请 Maven Central 发布权限

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

Alt text

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

2. 编写 Gradle 发布脚本

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

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

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

apply from: '../maven_push.gradle'

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

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 :

➜  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 :

$ 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 :

# 查看 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
# ~/.gradle/gradle.properties

signing.keyId=8C1761A2
signing.password=password
signing.secretKeyRingFile=/Users/special/.gnupg/secring.gpg
nexusUsername=username
nexusPassword=password

4. 执行 Gradle 发布脚本

%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」,准备发布项目。

Alt text

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

Alt text

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

6. 结语

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

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


© 著作权归作者所有

共有 人打赏支持
specialcyci

specialcyci

粉丝 9
博文 2
码字总数 2627
作品 1
广州
程序员
加载中

评论(13)

-ROC-
-ROC-
jcenter显得简单多了:
http://zhengxiaopeng.com/2015/02/02/%E4%BD%BF%E7%94%A8Gradle%E5%8F%91%E5%B8%83%E9%A1%B9%E7%9B%AE%E5%88%B0JCenter%E4%BB%93%E5%BA%93/
specialcyci
specialcyci

引用来自“song314”的评论

已赞~
哈哈,谢谢你,朋友
song314
song314
已赞~
Feng_Yu
Feng_Yu

引用来自“绝望的八皮”的评论

有空试一试,之前发布自己项目试gradle没弄好改成mvn蛋疼死了
自己写详细的构建步骤也挺费劲的。还好gradle有各种plugin,直接apply plugin,之后按照目录结构存放代码,光gradle build就完事了。就多个子项目之间有依赖的时候需要自己手写一下build.gradle整理一下项目之间的依赖关系。总体上来说,有了plugin这个玩意之后,还算简单。
绝望的八皮
绝望的八皮
有空试一试,之前发布自己项目试gradle没弄好改成mvn蛋疼死了
specialcyci
specialcyci

引用来自“貌似掉线”的评论

发布到jcenter中要简单很多。
先在bintray.com注册个账号,然后在你的~/.gradle/gradle.properties(windows下的话应该是把~换成你的用户文件夹)配置一直bintrayUser(你在bintray用户名)bintraykey(你的bintray key,不是密码,在个人设置那里可以看到一个貌似是API KEY的东西)。
接着,来这个项目:https://github.com/msdx/gradle-publish
参考里面的gradle.properties配置你项目里面的gradle.properties,然后参考这里的build.gradle配置你的build.gradle。
配置完毕之后,执行gradle bintray就可以了,然后等管理员审核。
多谢指点,已 star,这周末会尝试下发布到 jCentral~
specialcyci
specialcyci

引用来自“waylau”的评论

好,顶一个。~支持 gradle~
#https://github.com/waylau/Gradle-2-User-Guide#
赞啊!先 star 个。
貌似掉线
貌似掉线
刚才才想起,这里的bintray.gradle是发布android 项目的,包括源码,文档以及AAR。
貌似掉线
貌似掉线
bintrayUser和bintraykey这两个看bintray.gradle里的实际情况,我打算改成BINTRAY_USER和BINTRAY_KEY。
貌似掉线
貌似掉线
对了,建议是把那个bintray.gradle下载下来,一来是可以自己改,二来是我以后可能会改。
发布library到Maven仓库

发布library到Maven仓库 参考文章 https://github.com/xiaopansky/android-library-publish-to-jcenter/blob/master/README.md 发布library到Maven仓库----注册帐号等 将自己的开源项目提交到......

addcn
2016/01/22
410
0
Maven/JCenter,Ant/Gradle

> jcenter仓库 Android 快速发布开源项目到jcenter- http://blog.csdn.net/lmj623565791/article/details/51148825 使用Gradle发布Android开源项目到JCenter- http://blog.csdn.net/maosidi......

shareus
2017/11/24
0
0
Gradle 4.8.1 发布,项目自动化构建工具

Gradle 4.8.1 已发布,主要解决了以下 6 个问题: #5740: Maven Central 不再支持旧版 TLS 实现。如果 Gradle 在 JDK 7 上运行,会使依赖关系解析失败。 #5701: Gradle 4.8 破坏了 artifact...

王练
06/22
0
0
如何使用Android Studio把library分享到jCenter和Maven Central

原文:How to distribute your own Android library through jCenter and Maven Central from Android Studio 如果你想在Android Studio中引入一个library到你的项目,你只需添加如下的一行代......

中成才
2015/09/11
193
0
Gradle入门系列(5):创建多项目构建

转载: 本文由 伯乐在线 - JustinWu 翻译,黄利民 校稿。未经许可,禁止转载! 英文出处:petrikainulainen。欢迎加入翻译组。 尽管我们可以仅使用单个组件来创建可工作的应用程序,但有时候...

低至一折起
2017/12/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

配置Spring的注解支持

声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权;凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记。 配置Spring的注解支持 以上也提到了使用注解来配...

凯哥学堂
32分钟前
0
0
关于Spring Aop存在的一点问题的思考

在本人前面的文章Spring Aop原理之切点表达式解析中讲解了Spring是如何解析切点表达式的,在分析源码的时候,出现了如下将要讲述的问题,我认为是不合理的,后来本人单纯使用aspectj进行试验...

爱宝贝丶
34分钟前
0
0
JavaScript 概述

JavaScript是面向Web的编程语言。绝大多数现代网站都使用了JavaScript,并且所有的现代Web浏览器——基于桌面系统、游戏机、平板电脑和智能手机的浏览器——均包含了JavaScript解释器。这使得...

Mr_ET
今天
0
0
Java Run-Time Data Areas(Java运行时数据区/内存分配)

Java运行时数据区(内存分配) 本文转载官网 更多相关内容可查看官网 中文翻译可参考 2.5. Run-Time Data Areas The Java Virtual Machine defines various run-time data areas that are use...

lichuangnk
今天
0
0
docker learn :services docker-compose.yml

docker-compose.yml定义了服务的运行参数 version: "3" services: web: # replace username/repo:tag with your name and image details image: hub.c.163.com/dog948453219/friendlyhello d......

writeademo
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部