前提

  为什么突然要使用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.srcDirsclassifier = '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=PathToYourKeyRingFileossrhUsername=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提供的官方文档

android发布三方库到远程maven仓库详细教程相关推荐

  1. Android主流三方库源码分析(九、深入理解EventBus源码)

    一.EventBus使用流程概念 1.Android事件发布/订阅框架 2.事件传递既可用于Android四大组件间通信 3.EventBus的优点是代码简洁,使用简单,事件发布.订阅充分解耦 4.首 ...

  2. 怎样在nexus 中 搜索到远程maven仓库中的jar 文件

    怎样在nexus 中 搜索到远程maven仓库中的jar 文件 url: http://www.oschina.net/question/95712_21999 点击Administration菜单下 ...

  3. android 三方_面试官送你一份Android热门三方库源码面试宝典及学习笔记

    前言 众所周知,优秀源码的阅读与理解是最能提升自身功力的途径,如果想要成为一名优秀的Android工程师,那么Android中优秀三方库源码的分析和理解则是必备技能.就拿比较热门的图片加载框架Glid ...

  4. 2022 最新 Android studio添加阿里云Aliyun Maven仓库

    2022 最新 Android studio添加阿里云Aliyun Maven仓库 网上看了很多的文章,都是老文章,要不就是AS是老版本,我是个新手,也不懂AS老了有啥好的,所以下载AS的时候,默认就 ...

  5. eclipse怎么导入maven项目 eclipse导入maven项目详细教程

    转自:http://www.pc6.com/infoview/Article_114542.html Eclipse怎么导入maven项目一直是困扰着大量程序猿和刚上手小白们的问题,使用eclipse ...

  6. Gradle 7.0+发布Gradle插件到私有maven仓库笔记

    最近用Java写了一个Gradle插件 插件介绍 https://blog.csdn.net/wang382758656/article/details/124236006?spm=1001.2014 ...

  7. Android 使用Nexus搭建本地私有Maven仓库

    一.前言 在Android开发中,经常有一种场景:需要将写好的某个lib用于各个不同的项目中. 做法有二:1.将lib直接导入到项目中,缺点:繁琐,一旦lib项目出现bug,所有导入的项目都要去修改. ...

  8. [Android]上传到多个Maven仓库的Gradle插件RapidMavenPushPlugin

    博客搬迁至https://blog.wangjiegulu.com RSS订阅:https://blog.wangjiegulu.com/feed.xml RapidMavenPushPlugin 用 ...

  9. android maven 仓库地址,Android : 搭建本地和使用Maven仓库

    当我们创建一个module 插件的时候,可以将该目录下的代码上传到maven仓库中.远程的仓库需要申请域名,这就不说了,我们现在创建一个本地的maven仓库. 1)我们有个项目 twomodule插件 ...

最新文章

  1. 在Ubuntu18.04上安装opencv 3.4.1
  2. LeetCode 452 Minimum Number of Arrows to Burst Balloons(贪心法)
  3. ASP.NET MVC开发中常见异常及解决方案
  4. 知道Python中的字符串是什么吗?
  5. 转载:c输入空格字符串
  6. xcode快速开发 代码块
  7. socket 端口和地址复用
  8. IDEA部署Tomcat
  9. 21.为什么要用swagger,它解决了什么问题?
  10. 米家扫地机器人是石头代工的_石头科技的隐忧:智能扫地机器人前有高山 后有追兵...
  11. StanfordDB class自学笔记 (九) Relational Design Theory 关系设计理论
  12. 关于天猫魔盒tmb100系列 开机灯亮显示器无反应的问题分析
  13. Stata命令xtreg求残差
  14. java小组队徽_小组队徽设计.ppt
  15. Vue中el-dialog的用法
  16. 分词使用 jieba 、IKAnalyzer
  17. Flume之生产正确的使用方式一(Singel Agent)
  18. redis value最大值_Redis value的5种类型及常见操作
  19. RSYNC 自动同步文件免密
  20. Linux下启动Oracle数据库服务

热门文章

  1. Unity功能点---NavMesh的爬墙(OffMeshLink)和路障(NavMesh Obstacle)
  2. java 小米抢购_java 小米商城抢手机redmik30 pro
  3. 有哪些投资小的生意(盘点四个投资小风险低的生意)
  4. 小岛经济学:鱼、美元和经济的故事
  5. Mapper 文件中特殊符号转义的写法
  6. 提升自身能力去做更简单的事情
  7. css 字体颜色阶梯过渡,CSS3——过渡(transition)
  8. JetsonNano学习(一)SDKManager系统烧录
  9. 国庆六日游——第三天第一题
  10. 传统存储方式_海量非结构化数据存储方案