前提

  为什么突然要使用maven了,jcenter可是google御用三方仓库,难道jcenter不香了吗?没错,jcenter就是不香了。当你升级AndroidStudio版本再次创建项目后发现build.gradle的文件仓库声明中jcenter()出现了一条横线并且后面出现了一行注释
在这里插入图片描述
这意味着jcenter已经被废弃,当你升级到Android Studio Arctic Fox | 2020.3.1 Patch 2之后已经不会出现jcenter()只有google()和mavenCentral()了。

  android上几乎所有的第三方开源项目都会选择将库发布到jcenter,例如Glide、OkHttp、Rxjava等。google突然放弃jcenter可谓是影响到了所有的android开发者,那google为什么要这样做呢?是jcenter出什么问题了吗?吓得我赶紧去JFrog官网看看,不看不知道一看还真吓一跳
在这里插入图片描述

原来在 2021 年 02 月 03 日,JFrog发布了一篇名为《Into the Sunset on May 1st: Bintray, GoCenter, and ChartCenter》的博文,文章里说为了简化 JFrog 平台的工作效率,我们将于 2021 年 5 月 1 日停用 Bintray、GoCenter 和 ChartCenter 服务。JCenter 将不再接受任何提交。

  虽然文章还指出将无限期的将JCenter 保留为只读存储库,但是只停留在当前版本了,那如果想使用最新版本怎么办,办法就是转移到maven仓库。

  在开始之前,先对一些概念做一下了解是很必要的,后面用到的时候并不会挠头问这是个什么玩意

Sonatype

Sonatype是美国一家开源DevOps服务供应商,支持开源组件(中央仓),为开发者提供资源库管理器(Nexus)

OSSRH

OSSRH(Open Source Software Repository Hosting)是Sonatype 提供的一个开源软件资源库托管工具,帮助我们来方便的将项目发布到中心仓库中。它是项目所有者和贡献者将其组件发布到中央资源库的主要途径。

JIRA

JIRA是Atlassian公司出品的项目与事务跟踪工具,被广泛应用于缺陷跟踪、客户服务、需求收集、流程审批、任务跟踪、项目跟踪和敏捷管理等工作领域。

GPG

将项目发布到maven仓库的要求之一是它们已与 PGP 签署。GnuPG 或 GPG是 OpenPGP 标准的免费实现。GPG 提供了生成签名、管理密钥和验证签名的功能

下面介绍如何发布三方库到maven。

创建JIRA 帐户

注册地址:https://issues.sonatype.org/secure/Signup!default.jspa
在这里插入图片描述

创建新项目工单

地址:https://issues.sonatype.org/secure/CreateIssue.jspa?issuetype=21&pid=10134
在这里插入图片描述

  • Project:选择Community Support - Open Source Project Repository Hosting
    (OSSRH)
  • Issue Type:选择New Project
  • Summary:写个标题做个简单概述你要做什么。真不知道写什么,直接把项目名称写上就行
  • Group Id:
    • 有域名 可以使用子域名作为Group Id 。例:自己的域名叫csdn.com,那么就用com.csdn.test作为Group Id
    • 没域名 如果有github账号也可以,例:io.github.github账号名
注意:com.github.* Group IDs已经无效
  • Project URL:填写该项目的Github地址
  • SCM url:只需要在上面的Github地址后面加上.git后缀即可

查看自己的项目工单:https://issues.sonatype.org/secure/Dashboard.jspa

审核人会根据你填写的GroupId,来要求你配合完成一些验证,会在comments里面回复你,我使用的是github所以让我在github中创建一个文件

如果验证通过那么你就会收到一条如下回复信息表示通过了,可以向maven发布了
在这里插入图片描述

使用 GPG 生成密钥对

下载gpg地址:https://gnupg.org/download/
我使用的是windows系统,所以这里只演示在windows下的操作
安装完成后打开cmd,执行

1. gpg --version //查看版本确认是否安装成功
2. gpg --full-generate-key //创建密钥
3. gpg --export-secret-keys -o secring.gpg //导出密钥,记住路径,后面在build.gradle中配置需要用到
4. gpg --keyserver keyserver.ubuntu.com --send-keys CA925CD6C9E8D064FF05B4728190C4130ABA0F98 //分发到密钥服务器,以便用户可以对其进行验证

注意:这里有个坑,坑了我很久,就是官方文档给出的创建密钥命令是

gpg --gen-key

我生成之后得到的公钥是这样的
在这里插入图片描述
注意看公钥是ed开头,也就是EDDSA加密算法,而官方使用相同的命令生成的密钥是这样的
在这里插入图片描述
是RSA加密算法,这就导致最后提交的时候怎么也不成功,这就是问题所在,所以需要使用gpg --full-generate-key去选择使用RSA的算法
在这里插入图片描述

配置gradle

在需要发布类库的build.gradle中添加

// 添加插件
apply plugin: 'maven'
apply plugin: 'signing'

// 生成jar包的task
task sourcesJar(type: Jar) {
    from android.sourceSets.main.java.srcDirs
    classifier = 'sources'
}

artifacts {
    archives sourcesJar
}
// 签名
signing {
    sign configurations.archives
}

group = "io.github.lonelypluto"// groupId
version = "3.0.11"// 库的当前版本

uploadArchives {
    repositories {
        mavenDeployer {
            beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) }

            repository(url: "https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/") {
                authentication(userName: ossrhUsername, password: ossrhPassword)
            }

            snapshotRepository(url: "https://s01.oss.sonatype.org/content/repositories/snapshots/") {
                authentication(userName: ossrhUsername, password: ossrhPassword)
            }

            pom.project {
                name 'ExampleApplication'// 项目名称
                packaging 'aar'// 资源类型
                artifactId 'lib'// 库名
                description 'A application used as an example'// 描述
                url 'https://github.com/LonelyPluto/ExampleApplication'

                scm {
                    connection 'scm:git@github.com:LonelyPluto/ExampleApplication.git'
                    developerConnection 'git@github.com:LonelyPluto/ExampleApplication.git'
                    url 'https://github.com/LonelyPluto/ExampleApplication'
                }

                licenses {
                    license {
                        name 'The Apache License, Version 2.0'
                        url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
                    }
                }

                developers {
                    developer {
                        id 'manfred'// 开发者账号
                        name 'Manfred Moser'// 名字
                        email 'manfred@sonatype.com'// 邮箱
                    }
                }
            }
        }
    }
}

在gradle.properties文件中添加签名和上传的凭据

signing.keyId=YourKeyId
signing.password=YourPublicKeyPassword
signing.secretKeyRingFile=PathToYourKeyRingFile

ossrhUsername=your-jira-id
ossrhPassword=your-jira-password
  • keyId:gpg中生成的pub的最后 8 个字符
    例:CA925CD6C9E8D064FF05B4728190C4130ABA0F98,那么keyId就是0ABA0F98
  • password:生成pgp时填写的密码
  • secretKeyRingFile:导出gpg私钥时本地存储路径
    例:E\:\\gpg\\secring.gpg实际就是E:\gpg\secring.gpg
  • ossrhUsername:开始注册JIRA的账号
  • ossrhPassword:JIRA密码

填写完信息点击Terminal执行命令

gradle uploadArchives

将库发布到中央存储库

地址:https://s01.oss.sonatype.org/#stagingRepositories
账号就是JIRA的账号,登录后点击左侧的Staging Repositories,然后右侧就会显示你所提交的库,如果库没有什么问题那么选中后点击上面工具栏的Close按钮
在这里插入图片描述
点击之后maven库会对你的库进行验证,验证完成后点击Close左边的Refresh按钮就会出现Release按钮,然后点击Release,至此发布完成。
在这里插入图片描述
完成之后需要等待半小时左右的时间才能使用,在此期间你注册JIRA的时候填写的邮箱会收到邮件通知
在这里插入图片描述
https://repo1.maven.org/maven2/ 30分钟之后可以在里面找到自己的库
https://search.maven.org 四个小时之后可以在里面找到自己的库

sonatype提供的官方文档

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐