【前言】
阅读本文,您将了解如何使用Sonatype Nexus在Maven Central Repository开通账户,并提交、管理您的开源AndroidLibrary。
首先,介绍一下名次概念:
(1)Sonatype: 一款著名的maven仓库管理软件
(2)aar:Google为Android开发所设计的一种library格式,全名为Android Archive Library,与Java Jar Library不同的是,aar除了java code之外还包含资源文件,即xml文件、图片、文字等,jar逐渐被aar所取代。
(3)Maven Central Repository:即Maven中央仓库,全球多数优秀的SDK均会在此发布,Android Studio也默认提供了对它的依赖支持。
【一、准备工作】
1、注册Sonatype Nexus账号( https://issues.sonatype.org)
2、下载并安装GPG签名工具(gpg4win下载地址)
3、登陆Maven Central Repository(https://oss.sonatype.org/),账号与Sonatype Nexus共用
【二、实践步骤】
第一步:在Sonatype上创建一个Project Ticket(链接地址)

-Project : 选择Community Support - Open Source Project Repository Hosting
-Issue:选择Type New Project-Summary:填写项目名称
-Description:填写描述
-Group Id:域名反转,如www.redapplenet.com域名则反转为com.redapplenet。规则见(http://central.sonatype.org/pages/choosing-your-coordinates.html)
-Project URL:项目的git主页地址。如https://gitee.com/wuguojin/android_core_library
-SCM url:项目的git下载地址,如https://gitee.com/wuguojin/android_core_library.git
提交成功后,管理员会在评论里向你核实一些信息,如询问你是否拥有上述域名,需要在Comment中回复管理员,方可继续审核。待管理员审核后,状态会变为Resolved,则表示ticket创建成功。
第二步:GPG工具生成密钥,并上报服务器。
使用cmd命令行,依次执行如下命令:
gpg --version
(获取版本号)
gpg --gen-key
(生成密钥)过程中,根据命令行提示输入真实姓名、邮箱、密码(要记住、后面会用到)
gpg --list-keys --keyid-format SHORT
(列出所有密钥)
gpg --keyserver hkp://pool.sks-keyservers.net --send-keys A6BAB25C
(提交密钥到服务器,其中A6BAB25C替换为上一步获取到的八位短ID)
打开Kleopatra,在列表中找到刚刚创建的密钥对,右键-导出绝密密钥,选择导出位置,输入任意文件名以.pgp后缀结尾,点击OK导出。备用
第三步:配置AS工程中gradle.properties
## signing plugin
signing.keyId=FDA493CF ##提交给服务器的短ID
signing.password=Huicent ##生成密钥时输的密码
signing.secretKeyRingFile=../huicent.pgp ##上一步导出的.pgp密钥文件相对路径
## sonatype mavneCentral account
sonatype_username=xxx ##sonatype注册名
sonatype_pwd=xxx ##sonatype密码
## maven configs
maven_repo_url=https://oss.sonatype.org/service/local/staging/deploy/maven2/ ##见[附]
maven_snapshot_url=https://oss.sonatype.org/content/repositories/snapshots/ ##见[附]
maven_group_id=com.redapplenet ##第1步创建ticket时填写的Group Id
第四步:编写gradle Task UploadArchieve等
LibraryModule的build.gradle,代码如下
apply plugin: 'maven'
apply plugin: 'signing' //使用signing plugin做数字签名
String moduleName = "CoreLibrary"
...(省略)...
//依赖maven中心仓库
repositories {
mavenCentral()
}
// 创建gpg签名验证任务
signing {
sign configurations.archives
}
//通过from函数指定代码源,这里是默认代码源
task generateSourcesJar(type: Jar) {
from android.sourceSets.main.java.srcDirs
classifier 'sources'
}
//创建source上传任务
artifacts {
archives generateSourcesJar
}
//打包aar并提交mavenCentral
uploadArchives {
repositories.mavenDeployer {
beforeDeployment {
MavenDeployment deployment -> signing.signPom(deployment)
}
repository(url: "${maven_repo_url}") {
authentication(userName: "${sonatype_username}", password: "${sonatype_pwd}")
}
snapshotRepository(url: "${maven_snapshot_url}") {
authentication(userName: "${sonatype_username}", password: "${sonatype_pwd}")
}
pom.project {
name project.name
packaging 'aar'
groupId "${maven_group_id}"
artifactId moduleName //模块名
version '1.0.0-rc1' //aar版本号
description 'AndroidCoreLib' //备注
url 'https://gitee.com/wuguojin/android_core_library.git'
scm {//Git项目地址
url 'scm:git@gitee.com:wuguojin/android_core_library.git'
connection 'scm:git@gitee.com:wuguojin/android_core_library.git'
developerConnection 'git@gitee.com:wuguojin/android_core_library.git'
}
licenses {
license {
name 'The Apache Software License, Version 2.0'
url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
distribution 'Huicent'
}
}
developers {//开发者信息
developer {
id 'Huicent'
name 'Wu Guojin'
email 'wugj@redapplenet.com'
}
}
}
}
}
第五步:提交、发布aar
前提:第一步创建的project Ticket审核完成
(1)在Android Studio的Gradle面板找到uploadArchive指令,双击执行,等待console显示build successful,提交完成。
(2)登陆Snoatype Nexus,左侧栏点击Staging Repositories,在列表中找到刚刚提交仓库任务,选中点击Close,等待一段时间后(大约1分钟),刷新查看如果Close成功,则点击Release,即可完成发布。
dependencies {
...[省略]...
implementation 'com.redapplenet:HuicentCoreLibrary:1.0.4-rc3' //库sdk
...[省略]...
}
【附】MavenCentral地址
* Deploy snapshot artifacts into repositoryhttps://oss.sonatype.org/content/repositories/snapshots
* Deploy release artifacts into the staging repository
https://oss.sonatype.org/service/local/staging/deploy/maven2
* Promote staged artifacts into repository 'Releases'
* Download snapshot and release artifacts from group
https://oss.sonatype.org/content/groups/public
* Download snapshot, release and staged artifacts from staging group
https://oss.sonatype.org/content/groups/staging