Jcenter 是目前最大的 maven 源,通过 AS 创建的项目自身就使用 Jcenter,当我们想上传自己的 aar 至 jcenter 时都会选择官方提供的插件,它可以很方便的将我们的产物上传至 jcenter,然后在产物的详情页里点击 Add to jcenter 就可以提交审核到公共源里。
需求
由于项目开源需要将某些产物从私有 maven 发布到 jcenter,但是如果依赖插件打包就有太多的组件要打包历史版本,显然看起来时不可行的,所需要研究怎样把私有 maven 的产物发布到 jcenter。
方案
首先就想到通过 api 调用,使用 nexus 的 api 下载产物,然后通过 jcenter 的 api 上传产物。
下载脚本
通过搜索api即可搜索相关组件,通过对返回结果的分析,我们只需要获取downloadUrl
字段就可以拿到下载地址,也可以通过对downloadUrl
的获取下载产物的内容来做是否下载的判断。通过continuationToken
我们也可以获取分页信息。
根据上面的分析就可以写出一个简单的下载脚本
1 | def downloadArtifact(items): |
通过上面的代码就可以下载到我们所需的产物。
上传脚本
上传产物到 jcenter 可以使用 Bintray REST API,通过阅读文档可知上传需分两步,创建 Package、上传产物、发布产物。
1 | baseApi = 'https://api.bintray.com/' |
上传脚本其实很简单,需要仔细阅读 api 文档便可写出,在编写脚本过程中需要注意几点。
创建 package
- vcs_url 应该为项目的 git 源码
- licenses 为必填且是选择项,不可随意填写
- 重复创建也没关系,会失败不会影响原有 package
上传产物
- 第一次提交 AddToJcenter 是要求必须有 ***-sourcers.jar,所以必须上传该文件,如果已经同步过公开 jcenter 源,可以不上传
发布产物
意味着所有用户都可见,但是不在公共jcenter源,如果其他要使用需要添加
1 | maven { url "https://dl.bintray.com/{subject}/{repo}" } |
才能引用到该组件
注意
AddToJcenter 需要官方审核,在文档中没有找到相关接口,所以只能通过 Web 操作才可以