android发布三方库到远程maven仓库详细教程
前提
为什么突然要使用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仓库详细教程相关推荐
- Android主流三方库源码分析(九、深入理解EventBus源码)
一.EventBus使用流程概念 1.Android事件发布/订阅框架 2.事件传递既可用于Android四大组件间通信 3.EventBus的优点是代码简洁,使用简单,事件发布.订阅充分解耦 4.首 ...
- 怎样在nexus 中 搜索到远程maven仓库中的jar 文件
怎样在nexus 中 搜索到远程maven仓库中的jar 文件 url: http://www.oschina.net/question/95712_21999 点击Administration菜单下 ...
- android 三方_面试官送你一份Android热门三方库源码面试宝典及学习笔记
前言 众所周知,优秀源码的阅读与理解是最能提升自身功力的途径,如果想要成为一名优秀的Android工程师,那么Android中优秀三方库源码的分析和理解则是必备技能.就拿比较热门的图片加载框架Glid ...
- 2022 最新 Android studio添加阿里云Aliyun Maven仓库
2022 最新 Android studio添加阿里云Aliyun Maven仓库 网上看了很多的文章,都是老文章,要不就是AS是老版本,我是个新手,也不懂AS老了有啥好的,所以下载AS的时候,默认就 ...
- eclipse怎么导入maven项目 eclipse导入maven项目详细教程
转自:http://www.pc6.com/infoview/Article_114542.html Eclipse怎么导入maven项目一直是困扰着大量程序猿和刚上手小白们的问题,使用eclipse ...
- Gradle 7.0+发布Gradle插件到私有maven仓库笔记
最近用Java写了一个Gradle插件 插件介绍 https://blog.csdn.net/wang382758656/article/details/124236006?spm=1001.2014 ...
- Android 使用Nexus搭建本地私有Maven仓库
一.前言 在Android开发中,经常有一种场景:需要将写好的某个lib用于各个不同的项目中. 做法有二:1.将lib直接导入到项目中,缺点:繁琐,一旦lib项目出现bug,所有导入的项目都要去修改. ...
- [Android]上传到多个Maven仓库的Gradle插件RapidMavenPushPlugin
博客搬迁至https://blog.wangjiegulu.com RSS订阅:https://blog.wangjiegulu.com/feed.xml RapidMavenPushPlugin 用 ...
- android maven 仓库地址,Android : 搭建本地和使用Maven仓库
当我们创建一个module 插件的时候,可以将该目录下的代码上传到maven仓库中.远程的仓库需要申请域名,这就不说了,我们现在创建一个本地的maven仓库. 1)我们有个项目 twomodule插件 ...
最新文章
- 在Ubuntu18.04上安装opencv 3.4.1
- LeetCode 452 Minimum Number of Arrows to Burst Balloons(贪心法)
- ASP.NET MVC开发中常见异常及解决方案
- 知道Python中的字符串是什么吗?
- 转载:c输入空格字符串
- xcode快速开发 代码块
- socket 端口和地址复用
- IDEA部署Tomcat
- 21.为什么要用swagger,它解决了什么问题?
- 米家扫地机器人是石头代工的_石头科技的隐忧:智能扫地机器人前有高山 后有追兵...
- StanfordDB class自学笔记 (九) Relational Design Theory 关系设计理论
- 关于天猫魔盒tmb100系列 开机灯亮显示器无反应的问题分析
- Stata命令xtreg求残差
- java小组队徽_小组队徽设计.ppt
- Vue中el-dialog的用法
- 分词使用 jieba 、IKAnalyzer
- Flume之生产正确的使用方式一(Singel Agent)
- redis value最大值_Redis value的5种类型及常见操作
- RSYNC 自动同步文件免密
- Linux下启动Oracle数据库服务