Android Gradle7.0上传Library到maven仓库
原因
日常开发的时候我们经常引用一个依赖库然后就可以使用里面的API,非常方便。
自身也喜欢写一些工具类和库,写了几年了现在手里依然没有一个经常维护的库。就连Log工具类也换了好多个。就有一个想法以后换项目直接引用一行依赖,依赖有问题更新依赖就行。也不存在换公司换项目代码不好复制和替换。
implementation'com.squareup.okhttp3:okhttp:4.8.0'
本地环境
Gradle7.0
Android Studio Arctic Fox | 2020.3.1 Patch 4
正常网络
一、Sonatype 账号
注册账号
需要先注册登录 Sonatype,访问 https://issues.sonatype.org
邮箱建议使用常用的邮箱,因为后面开通权限是人工审核,有什么结果都是邮件通知
申请上传权限
新建项目
https://issues.sonatype.org/secure/Dashboard.jspa
按照下面提示填入内容
然后等待对方回复,对方回复了会发邮件给你。正常的情况他会让在github创建一个他指定名的公开库的。
你只需根据他的评论在github创建仓库。记得修改状态等待,再次核实
二、配置Gradle
创建一个Gradle文件,取名按自己来。 复制下面代码进行修改
// 必备插件apply plugin: 'maven-publish'apply plugin: 'signing'// 刚才申请的GROUP_ID def GROUP_ID = 'io.github.xxx'// 名称def ARTIFACT_ID = 'JavaTools'// 版本def VERSION_NAME = '0.0.1'// 下面是介绍是别人在MavenCentral仓库搜索到你可以看到的消息def DESCRIPTION = '一个简化xxx开发的x库'def GIT_LOCATION = 'github.com/ohuo133233/Tools'def GIT_LOCATION_URL = 'https://' + GIT_LOCATION//仓库地址 (直接复制不用修改)def MAVEN_URL = "https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/"// 注册 Sonatype的用户名和密码def nexusUsername = 'xxx'def nexusPassword = 'xxx'task sourceJar(type: Jar) { if (hasAndroidPlugin()) { println "======> Android" from android.sourceSets.main.java.srcDirs //noinspection GroovyAccessibility archiveClassifier = 'sources' } else if (hasJavaPlugin()) { println "======> Java" from sourceSets.main.allSource //noinspection GroovyAccessibility archiveClassifier = 'sources' }}afterEvaluate { project -> tasks.all { Task task -> if (task.name.equalsIgnoreCase('publishAarPomPublishPublicationToSnapshotsRepository')) { task.dependsOn tasks.getByName('assemble') } }}def hasJavaPlugin() { if (plugins.hasPlugin("java-library")) { return true } return false}def hasAndroidPlugin() { if (plugins.hasPlugin("com.android.library")) { return true } return false}publishing { println "======> ${project.name}" println "====> the aar path is " + "$buildDir/outputs/aar/${project.name}-release.aar" println "====>" + MAVEN_URL println "====>" + VERSION_NAME publications { aarPomPublish(MavenPublication) { groupId GROUP_ID artifactId ARTIFACT_ID version VERSION_NAME artifact(sourceJar) artifact("$buildDir/outputs/aar/${project.name}-release.aar") pom { packaging 'aar' name = ARTIFACT_ID description = DESCRIPTION url = GIT_LOCATION_URL licenses { license { name = 'The Apache License, Version 2.0' url = 'http://www.apache.org/licenses/LICENSE-2.0.txt' } } developers { // 同样是展示到 https://search.maven.org 的信息 developer { id = 'my_maven' name = 'wangxiansheng' email = '[email protected]' } } scm { connection = 'scm:git:' + GIT_LOCATION + '.git' developerConnection = 'scm:git:ssh://' + GIT_LOCATION + '.git' url = GIT_LOCATION_URL } } pom.withXml { def dependenciesNode = asNode().appendNode('dependencies') configurations.implementation.allDependencies.each { if (it.version != "unspecified") { // 过滤项目内library引用 println "=====>" + it.properties println "=====>" + it.group + " " + it.name + it.version if (it.group == null || it.name == null || it.version == null) return if (it.group == group) return def dependencyNode = dependenciesNode.appendNode('dependency') dependencyNode.appendNode('groupId', it.group) dependencyNode.appendNode('artifactId', it.name) dependencyNode.appendNode('version', it.version) if (it.excludeRules.size() > 0) {def exclusionsNode = dependencyNode.appendNode('exclusions')it.excludeRules.each { rule -> def exclusionNode = exclusionsNode.appendNode('exclusion') exclusionNode.appendNode('groupId', rule.group) exclusionNode.appendNode('artifactId', rule.module)} } } } } } } repositories { maven { name "snapshots" url MAVEN_URL credentials { username = nexusUsername password = nexusPassword } } }}// signing 必须在 publishing 配置之后signing { sign publishing.publications.aarPomPublish}
在自己要发布的library下的build.gradle中引用
apply from: 'xxx.gradle'
放到顶部就行,然后Sync Now。 查看gradle是否有publishing task
三、GPG 签名
跳转https://www.gpg4win.org/get-gpg4win.html 去下载Gpg4win
创建密钥
选择创建个人openPGP密钥
一定要使用密码保护生成勾选生成密钥
上传结束建议去 https://keys.openpgp.org/去查一下
如果出现出现 gpg: keyserver send failed ,就按下面步骤来。
如果没有可以手动上传,点击upload,选择文件上传成功再查询。
导出私钥
先修改文件格式为gpg格式,再保存。先保存后修改无效
配置密钥
在 C:\Users\Hello.gradle找到 gradle.properties文件
复制下面配置到gradle.properties文件
# MavenCentralsigning.keyId=FCE86F1Bsigning.password=155620110Qqq# 私钥目录 我的是在项目里面signing.secretKeyRingFile=./Admin_0xFCE86F1B_SECRET.gpgossrhUsername=my_mavenossrhPassword=155620110Www.
把私钥放到指定目录,记得忽略提交私钥,不然别人也可以发版了,哈哈。
三、发布档案
打开 https://s01.oss.sonatype.org/#welcome 点击左上角的login
查看Activity是否成功
没有问题点击colse
根据情况填入内容
等待结束,查看结果
点击release发布
根据情况输入内容
成功后刷新应该就没有记录了。
等待几个小时后可以在 https://search.maven.org/ 查询发布结果
参考资料
Demo:https://github.com/ohuo133233/Tools
参考别人的文档
https://blog.csdn.net/csdn_lqr/article/details/115979598