为什么突然要使用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是美国一家开源DevOps服务供应商,支持开源组件(中央仓),为开发者提供资源库管理器(Nexus)
OSSRH(Open Source Software Repository Hosting)是Sonatype 提供的一个开源软件资源库托管工具,帮助我们来方便的将项目发布到中心仓库中。它是项目所有者和贡献者将其组件发布到中央资源库的主要途径。
JIRA是Atlassian公司出品的项目与事务跟踪工具,被广泛应用于缺陷跟踪、客户服务、需求收集、流程审批、任务跟踪、项目跟踪和敏捷管理等工作领域。
将项目发布到maven仓库的要求之一是它们已与 PGP 签署。GnuPG 或 GPG是 OpenPGP 标准的免费实现。GPG 提供了生成签名、管理密钥和验证签名的功能
下面介绍如何发布三方库到maven。
注册地址:https://issues.sonatype.org/secure/Signup!default.jspa
地址:https://issues.sonatype.org/secure/CreateIssue.jspa?issuetype=21&pid=10134
注意:com.github.* Group IDs已经无效
查看自己的项目工单:https://issues.sonatype.org/secure/Dashboard.jspa
审核人会根据你填写的GroupId,来要求你配合完成一些验证,会在comments里面回复你,我使用的是github所以让我在github中创建一个文件
如果验证通过那么你就会收到一条如下回复信息表示通过了,可以向maven发布了
下载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的算法
在需要发布类库的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:[email protected]:LonelyPluto/ExampleApplication.git'
developerConnection '[email protected]: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 '[email protected]'// 邮箱
}
}
}
}
}
}
在gradle.properties文件中添加签名和上传的凭据
signing.keyId=YourKeyId
signing.password=YourPublicKeyPassword
signing.secretKeyRingFile=PathToYourKeyRingFile
ossrhUsername=your-jira-id
ossrhPassword=your-jira-password
E\:\\gpg\\secring.gpg
实际就是E:\gpg\secring.gpg填写完信息点击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提供的官方文档