SonaType Maven for Android 使用教程
说明
本文将展示如何将AAR上传到mavenCentral中央仓库并使用
Maven仓库推送版本分为Release、SnapShot两个版本
| 版本 | 说明 |
|---|---|
| Release | 推送后不可再次重复推送相同的版本 |
| SnapShot | 快照版本,可相同版本重复推送,在版本开发中用于bug修复 |
教程
以下将以SonaType运营的mavenCentral()仓库为示例进行教程说明,教程主要分为以下几个步骤:
- 注册SonaType账号
- 创建Group ID
- 下载安装gunpg
- 创建生成秘钥
- 配置
maven-publish打包推送aar - 发布到mavencentral中央仓库
- 从mavencentral中央仓库使用发布的aar
1. 注册SonaType账号
打开注册地址,如图填写信息
2. 创建Group ID
注册登录后,在顶部点击**新建**创建问题,并按图填写相关信息
请注意谨慎填写Group ID,这将影响到添加依赖时使用的名称,其他请按照示例进行填写
在Github创建完存储库后, 需要点击**【备注】对工单使用英文**进行回复,如下示例, 再过几分钟后工单状态变为【已解决】,则已完成
Hello, the repository has been created.
please check, thanks
3.下载gunpg
由于maven-publish发布时需要签名,需要下载安装gnupg,以下将以macOS 系统进行示例
打开下载地址,点击Mac GPG进行下载
安装完成后在控制台输入gpg --version,即可查看版本号
4. 创建秘钥
打开安装的GPG Keychain软件,点击顶部【文件】->【新公钥】在弹窗中填入相关信息
创建完成后会提示发布证书,按照提示上传即可
通过以下命令导出秘钥,路径部分请修改为需要导出的地址,在弹出的弹窗中,输入创建key填入的密码
gpg --export-secret-keys -o /Users/你的设备名称/work/secring.gpg
复制导出的秘钥到工程根目录
复制创建的秘钥最后8位,打开项目local.properties文件,将一下内容复制进去并填写对应信息
# 密钥ID的后8位
signing.keyId=xxxxxxxx
# 步骤4中 创建密钥时填写的密码
signing.password=xxxxxx
# 步骤4中 备份私钥保存的文件路径
signing.secretKeyRingFile=..\\secring.gpg
# 步骤1中 注册sonatype的用户名与密码
ossrhUsername=xxx
ossrhPassword=xxx
5. 配置上传脚本
在工厂根目录创建mavencenteral.gradle文件,并复制以下信息即可, 在对应需要修改的地方修改代码
apply plugin: 'maven-publish'
apply plugin: 'signing'
def PUBLISH_VERSION = '1.0.2-SNAPSHOT' // 版本号,后缀添加SNAPSHOT则为快照版本
def PUBLISH_GROUP_ID = 'com.test' // 组名, 需要与sonatype上申请的一致,否则无法传入
def PUBLISH_ARTIFACT_ID = 'ad-core' // 工件名称
//以上内容会决定添加依赖时的名称, 以上则为:implementation 'com.test:ad-core:1.0.2-SNAPSHOT'
//以下内容无需修改,会从local.properties中读取
ext["signing.keyId"] = '' //签名的密钥后8位
ext["signing.password"] = '' //签名设置的密码
ext["signing.secretKeyRingFile"] = '' //生成的secring.gpg文件目录
ext["ossrhUsername"] = '' //sonatype用户名
ext["ossrhPassword"] = '' //sonatype密码
//打包源码到项目中中
task sourceJar(type: Jar) {
from android.sourceSets.main.java.srcDirs
classifier "source"
}
//读取配置的账号、秘钥等信息
File secretPropsFile = project.rootProject.file('local.properties')
if (secretPropsFile.exists()) {
println "Found secret props file, loading props"
Properties p = new Properties()
p.load(new FileInputStream(secretPropsFile))
p.each { name, value ->
ext[name] = value
}
} else {
println "No props file, loading env vars"
}
afterEvaluate {
publishing {
publications {
release(MavenPublication) {
groupId PUBLISH_GROUP_ID
artifactId PUBLISH_ARTIFACT_ID
version = PUBLISH_VERSION
//填写你的aar名称
artifact("$buildDir/outputs/aar/xxx.aar")
pom {
name = PUBLISH_ARTIFACT_ID //填写工件名称一致即可
url = '' //一般填git地址,也可以不填
developers {
developer {
id = 'id'
name = '你的sonatype用户名'
email = '' //你的sonatype注册邮箱
}
}
licenses {
license {
name = '许可证名称'
url = '许可证网页链接' //可以放到github上
}
}
scm {
connection = ''//项目在github链接
developerConnection = ''//github链接
url = '' //github项目对应的分支链接
}
withXml{
//解决上传版本号显示 unspecified 问题
def dependenciesNode = asNode().appendNode('dependencies')
configurations.implementation.allDependencies.each {
if(it.group != null && (it.name != null || "unspecified".equals(it.name)) && it.version != null)
{
def dependencyNode = dependenciesNode.appendNode('dependency')
dependencyNode.appendNode('groupId', it.group)
dependencyNode.appendNode('artifactId', it.name)
dependencyNode.appendNode('version', it.version)
}
}
}
}
}
}
repositories {
maven {
name = PUBLISH_ARTIFACT_ID
//正式版本上传地址
def releasesRepoUrl = "https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/"
//snapshot版本上传地址
def snapshotsRepoUrl = "https://s01.oss.sonatype.org/content/repositories/snapshots/"
url = PUBLISH_VERSION.endsWith('SNAPSHOT') ? snapshotsRepoUrl : releasesRepoUrl
credentials {
username ossrhUsername
password ossrhPassword
}
}
}
}
}
//签名信息
signing {
sign publishing.publications
}
在对应的功能模块build.gradle顶部增加以下代码
apply from: '../mavencenteral.gradle'
编译AAR包
-
点击Android Studio 中右侧
Gradle面板 -
找到对应模块
-
点击
build分类中assemble脚本
- 推送SDK到仓库
- 点击Android Studio 中右侧
Gradle面板 - 找到对应模块
- 点击
publishing分类中的publish
- 点击Android Studio 中右侧
//推送到本地
publishToMavenLocal
//推动到远程
publishReleasePublicationToMavenRepository
当上传完毕后,还未正式发布到公共仓库,还需要登录后台正式发布到仓库中
6. mavencentral发布
输入在SonaType注册的账号密码
- 点击左侧暂存库, 即可在列表中看到推送的aar, 如果没有点击
Refresh按钮刷新,或稍等几分钟 - 到目前为止,aar处于暂存状态,如果测试正常勾选上点击
close按钮 - 稍等片刻后,刷新几次,状态改变后点击
Release,发布AAR
发布Release版本后,此版本将无法修改、删除,只能发布新版本
7.使用发布的AAR
在项目根目录添加以下配置:
allprojects {
repositories {
google()
jcenter()
// 增加mavenCentral中央仓库
mavenCentral()
// 如果是上传到的本地仓库[.m2/]添加以下依赖
mavenLocal()
}
}
在模块的build.gradle中添加依赖
dependencies {
implementation 'com.test:ad-core:1.0.2-SHAPSHOT'
}





