Maven上传

使用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 创建工单

点击 创建按钮


Maven上传_第1张图片
image.png

注意:
项目:选择[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 等待回复

第一次审核要一天左右,再次创建的工单审核要一小时左右。
如无问题 解决结果变成 已修复 (此时也会发邮件给你)此时表示有权限可以上传东西了


Maven上传_第2张图片
image.png

里面的链接地址都能用的到的

三 、gradle配置

1 创建android studio 工程,添加一个module,封装我们需要的功能

2 配置gradle

1 在当前module下新建gradle.properties(如果没有的话),添加如下代码:maven 上传参数


Maven上传_第3张图片
image.png

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


Maven上传_第4张图片
image.png
查看上传结果

我的
SNAPSHOT 版
https://oss.sonatype.org/content/groups/public/com/github/zuochunsheng

release 版 显示的也是 SNAPSHOT
https://oss.sonatype.org/content/groups/staging/com/github/zuochunsheng/
注意:

Maven上传_第5张图片
image.png

可以看出其中有着原始文件以及签名等验证文件, 如果你的没有“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/ 最终表现形式为 可以在这里搜索到。

你可能感兴趣的:(Maven上传)