使用gradle发布aar到maven仓库
一、背景
我们有一个这样的需求 :封装一个库 包含一个或几个相关功能 提供给他人使用,别人引用我们的 jar包(或aar包)时,能够方便快速添加引用
再或者 某人人品爆发 封装了一些比较实用的库 比如 拍照和选择相册图片 ,6.0权限使用的封装 等等 想分享给别人使用 如果上传到GitHub 别人引用需要下载 添加moldule依赖,或者直接在app里面使用 还要把依赖的远程库重新依赖一遍 ,配置相当麻烦,此时我们也需要提供一个比较方法的依赖方式。
比较好的方式就是 上传到远程仓库,
上传方式
1 gradle (maven)
2 maven (maven)
3 bintray (jcenter)
今天说是是用 Android Studio gradle 配置的方式(相对容易)
二、准备工作
1 注册账号
从https://issues.sonatype.org 注册一个帐号(已经有的请忽略),账号和密码都要记住,下面登录账号密码还要用这个,后续配置 gradle也要用到。
2 创建工单
点击 创建按钮
注意:
项目:选择[Community Support - Open Source Project Repository Hosting ]
问题类型:选择 [New Project]
Group Id: 唯一标识,我用的是com.github.xxxxx
官方文档:http://central.sonatype.org/pages/choosing-your-coordinates.html
参考 注册 Maven 仓库 sonatype.org 账户 中的group Id 和注意事项
Project URL:项目源码的地址,如果不想公布源码,可以只填写一个只含README 的项目的地址。
SCM url:管理项目地址 ,可以跟Project URL 同一个。
点击创建 等待回复
3 等待回复
第一次审核要一天左右,再次创建的工单审核要一小时左右。
如无问题 解决结果变成 已修复 (此时也会发邮件给你)此时表示有权限可以上传东西了
里面的链接地址都能用的到的
三 、gradle配置
1 创建android studio 工程,添加一个module,封装我们需要的功能
2 配置gradle
1 在当前module下新建gradle.properties(如果没有的话),添加如下代码:maven 上传参数
2 在当前module下新建maven_upload.gradle文件,内容如下:
apply plugin: 'maven'
apply plugin: 'signing'
configurations { deployerJars }
repositories {
maven{ url"https://maven.google.com"}
jcenter()
mavenCentral()
maven { url "https://jitpack.io" }
google()
}
// 判断版本是Release or Snapshots
def isReleaseBuild() {
return !MAVEN_VERSION.contains("SNAPSHOT");
}
// 获取仓库url
def getRepositoryUrl() {
return isReleaseBuild() ? MAVEN_RELEASE_URL : MAVEN_SNAPSHOT_URL;
}
uploadArchives {
repositories {
mavenDeployer {
beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) }
pom.project {
version MAVEN_VERSION
groupId MAVEN_GROUP_ID
artifactId MAVEN_ARTIFACT_ID
packaging MAVEN_PACKAGING
description MAVEN_DESCRIPTION
name MAVEN_NAME
url MAVEN_URL
inceptionYear MAVEN_INCEPTION_YEAR
scm {
tag POM_TAG
url POM_SCM_URL
connection POM_SCM_CONNECTION
developerConnection POM_SCM_DEV_CONNECTION
}
licenses {
license {
name POM_LICENCE_NAME
url POM_LICENCE_URL
distribution POM_LICENCE_DIST
// comments POM_LICENCE_COMMENTS
}
}
developers {
developer {
//id POM_DEVELOPER_ID
name POM_DEVELOPER_NAME
email POM_DEVELOPER_EMAIL
//organization "paylibrary"
url POM_DEVELOPER_URL
}
}
}
repository(url: getRepositoryUrl()) {
authentication(userName: MAVEN_USERNAME, password: MAVEN_PASSWORD)
}
}
}
}
// 进行签名
signing { // 当 发布版本 & 存在"uploadArchives"任务时,才执行
// required {
// isReleaseBuild() && gradle.taskGraph.hasTask("uploadArchives")
// }
sign configurations.archives
}
里面的密码等敏感信息 放到此处不太合适 ,只是做测试使用,有人说可以放到忽略文件里面 ,这样就不会上传这些敏感信息。好吧 实在是有点啰嗦 ,言归正传 我们继续。
3 在moduley工程的build.gradle里面,添加如下代码:
apply from: 'maven_upload.gradle'
也可以是远程文件,
apply from: 'https://raw.githubusercontent.com/{$username}/.../master/.../maven_upload.gradle'
3 上传jar
注意:上传到maven的release服务器按理来说需要用到签名机制,android studio自带的签名是gpg机制,gradle 之前需要将公钥上传到maven服务器
参考这个 gpg常用命令
执行命令
1 打开 Terminal
gradlew uploadArchives
2 也可以选择gradle ->module ->upload->uploadArchives
查看上传结果
我的
SNAPSHOT 版
https://oss.sonatype.org/content/groups/public/com/github/zuochunsheng
release 版 显示的也是 SNAPSHOT
https://oss.sonatype.org/content/groups/staging/com/github/zuochunsheng/
注意:
可以看出其中有着原始文件以及签名等验证文件, 如果你的没有“asc”文件,那么在 https://oss.sonatype.org/#stagingRepositories 发布“Release”版本时将无法通过审核。
5 release版
我们在 gradle中这样设置的
// 判断版本是Release or Snapshots
def isReleaseBuild() {
return !MAVEN_VERSION.contains("SNAPSHOT");
}
所以只要将 gradle.properties 文件中的 VERSION_NAME ,删除后面的 “”-SNAPSHOT”“ 就是release版本 ,命令跟 snapshot 是一样的。
需要注意的是 快照版与 Release版区别。
1 快照版本是用来发布你的测试的地方,你可以多次发布同一个版本到该目录。对于同一个版本如 1.0.0 ,你的快照发布了10个,那么你将会看见十个快照版本文件
2 发布版本一个版本只能发布一次文件,除非你本次发布失败了需要重新提交。
额 ,跑题了
我们是要发布release版
1 登录https://oss.sonatype.org/#stagingRepositories 用户名和密码与https://issues.sonatype.org/ 中的完全一样,可以在搜索中 输入我们的groud Id, 快速找到我们上传的jar
2 选中后 点上方的Close,稍等片刻 它先检查一下你上传的东西是否符合规范,没有问题 检查完毕后该条状态被标记为closed ,上方的release 变为可点击状态。
3 选中后 点上面的Release,等2个小时左右即可在http://search.maven.org/搜索到你发布的jar包。
6 android studio 引用jar
例如
//使用快照版本
repositories { maven { url "https://oss.sonatype.org/content/repositories/snapshots/" } }
implementation 'com.github.zuochunsheng:paylibrary:1.0-SNAPSHOT'
//使用正式版
implementation 'com.github.zuochunsheng:paylibrary:1.0'
需要注意的是:
原本地依赖的库在远程无法添加依赖的 如 module ->libs 中的库 (在build.gradle 的dependencies 中 形如 implementation files('libs/xxx') 的文件)
在使用时任然要依赖一次
参考
[Publish AAR To Maven] 注册 Maven 仓库 sonatype.org 账户
几个Maven相关地址:
① https://issues.sonatype.org 工单管理地址,就是创建工单,申请上传资格的地方。
② https://oss.sonatype.org/#welcome 构件仓库,jar包会上传到这里,Release 之后就会同步到maven中央仓库。
③ http://search.maven.org/ 最终表现形式为 可以在这里搜索到。