发布开源项目到Maven 中心仓库
相信很多程序猿朋友都或多或少写过一些通用库文件,也有很多人会秉着开源的精神将代码分享到类似 Github 之类的代码托管网站去。
其实大家分享代码的时候,目的在于让更多的人使用,但是如果仅仅是放在 Github 这些工具上等人家下载使用,其实很多人是会觉得很麻烦的,那么有什么方法能够帮助我们在不下载 Github 上的源码的时候,使用这些代码吗?
回答自然是可以的,类似于 Maven,Gradle(其实 Gradle 获取代码的机制也是基于 Maven 的) 这种自动构建工具能够帮助你从网上获取指定的代码,并配置到你的项目中,因此我们只要能够将自己的代码上传到 Maven 中心仓库中,别人就能够通过几行代码对你的项目进行引用了。
接下来,我们会一步一步讲解如何将开源项目上传到 Maven 中心仓库。
首先,我先简单介绍一下我自己的平台环境配置:
Platform:MacOS Yosemite.
IDE:Android Studio 1.0.2.
Project:Android Library.
其实其他平台的也很类似,但是为了方便起见,我就简单介绍一下基于以上环境配置的分享步骤了。
先放上Maven 官方的指南地址:http://central.sonatype.org/pages/ossrh-guide.html
1.申请sonatype账号,并建立项目请求
Maven 的相关管理工作貌似是托管给了 sonatype.org 这个网站进行处理,当我们希望向 Maven 中心仓库中加入一个新的项目的时候,必须先在这里申请一个账号,并提供相应的项目信息。
申请账号的地址在这里: https://issues.sonatype.org/secure/Signup!default.jspa
申请完成之后,我们需要提供相应的项目信息,地址在这里:https://issues.sonatype.org/secure/CreateIssue.jspa?issuetype=21&pid=10134
填写项目信息的网页虽然是英文的,但是都挺简单,很多输入框下方都是相应的输入提示,因此我就不多做介绍了,图1中简单介绍了需要填写的相关信息:
图1 提供项目相关信息
点击 Create 之后,你就会进入一个 jira 页面(sonatype 使用jira 来追踪每一个项目进度),与此同时你注册时使用的邮箱中也会收到一封邮件提示你,任务创建成功,正在等待处理。
接下来我们需要做的就是等待,maven 项目只有在 sonatype 自己审核通过之后才能够正式发布,根据官网上的描述是大约耗时两天,不过我的项目第二天一早就已经发送邮件通知我创建成功了,为他们的速度点个赞。
2.上传项目到 Maven 中心仓库
如果你收到了 sonatype 的反馈邮件,确认已经为你创建好了新项目,你就可以开始上传你的项目了。
我这次是准备将自己新写的一个 Android 点击效果库文件上传到 Maven 仓库,由于我使用的是 Android Studio,因此我直接在我的 Library 项目的 gradle.build 文件中进行配置。
首先将以下代码添加到 gradle.build 文件尾部:
- apply plugin: 'maven'
- apply plugin: 'signing'
- signing {
- sign configurations.archives
- }
- group = "com.kifile"
- archivesBaseName = "MaterialView"
- version = "1.0"
- uploadArchives {
- repositories {
- mavenDeployer {
- beforeDeployment {
- MavenDeployment deployment -> signing.signPom(deployment);
- }
- repository(url: "https://oss.sonatype.org/service/local/staging/deploy/maven2/") {
- authentication(userName: ossrhUsername, password: ossrhPassword)
- }
- snapshotRepository(url: "https://oss.sonatype.org/content/repositories/snapshots/") {
- authentication(userName: ossrhUsername, password: ossrhPassword)
- }
- pom.project {
- name 'MaterialView'
- packaging 'aar'
- description 'This project is build to let the view looks like a material design widget when touched. '
- url 'https://github.com/Kifile/MaterialView'
- scm {
- connection 'scm:git:https://github.com/Kifile/MaterialView.git'
- developerConnection 'scm:git:https://github.com/Kifile/MaterialView.git'
- url 'https://github.com/Kifile/MaterialView.git'
- }
- licenses {
- license {
- name 'The Apache License, Version 2.0'
- url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
- }
- }
- developers {
- developer {
- id 'kifile'
- name 'Kifile Chou'
- email 'kifile@kifile.com'
- }
- }
- }
- }
- }
- }
在上面的代码中,大家请将根域中的 group,archiveBaseName,version以及 uploadArchives#pom.project 中的相关描述信息改成自己的就好了。
这些信息将会在接下来上传的时候,自动打包成 Maven 项目,并封装相应信息。
在这里我们就已经配置好了相应的版本信息,接下来我们需要配置上传时需要的签名以及密码等相关信息。
首先我们需要创建一个 gpg 签名秘钥,并将公钥上传到指定服务器。
在 MacOS 下,我们可以下载一个叫做GPGTools (http://www.gpgtools.org)的工具生成我们的签名文件。
安装好工具之后,我们在 Launchpad 中能够看到一个叫做GPG Keychains 的软件,打开之后,我们选择新建一个秘钥,参看图2:
图2创建 GPG 秘钥
点击新建之后,填写完相应信息之后,点击生成秘钥,我们就获取到了签名秘钥,之后右键选中创建的秘钥,点击 Send public key to key server.就能够将本地公钥上传到指定服务器了,参看图3。
图3上传公钥至公共服务器
上传完成之后,我们就可以正式配置签名信息以及你的 Maven 账户信息了,我们在 Library Module 的根目录下新建一个 gradle.properties 文件,内容如下:
- signing.keyId=输入在新建秘钥完成后显示的 keyId
- signing.password=输入你的秘钥密码
- signing.secretKeyRingFile=/Users/你的用户名/.gnupg/secring.gpg
- ossrhUsername=你在 sonatype 上的账户名
- ossrhPassword=你在 sonatype 上的密码
现在,你已经成功的将上传信息配置好了,通过命令行,进入 Library Module 所在的目录,输入 gradle uploadArchives 就能够将你的文件上传到 Maven 中央库了。
3.发布你的应用
你以为上传到 Maven 中央库就结束了吗?
才没有结束呢,到目前为止,你只是将你的文件上传到了 Maven 的一个私有服务器,是不能被其他人所访问的。如果你想正式发布你的应用,还要继续下面的步骤。
a.进入 Maven 项目控制台
进入以下地址:https://oss.sonatype.org/,并使用 sonatype 的账号密码在右上角进行登录。
b.查找你上传的项目
如果你登录成功,在左侧的导航栏,你会看到一个叫做 Staging Repositories 的选项,点击他,你会发现出现了很多列表选项,如下图4。
图4 仓库列表
根据列表名称,你会发现一个以你的 groud id 去掉点号后加上一个四位数字命名的Repository,例如这里是叫做 comkifile1000,选中它,你会发现上方的 Close 按钮亮起,当你确认上传无误之后,你可以点击 Close 按钮,关闭掉这个仓库,不允许再次上传。如果关闭成功,你点击刷新以后会发现,Release 按钮亮起,点击它即可发布。如果关闭失败,你可以看看下方的界面,查找一下失败原因,再次上传代码,关闭后发布。
到了这里,整个 Maven项目的发布流程已经结束了。
请注意,发布并不是实时生效的,我的代码差不多是在3个小时左右,才能够在 Maven 中心仓库检索到,所以如果你发布之后没能及时检索到,请稍后再试。