原因
日常开发的时候我们经常引用一个依赖库然后就可以使用里面的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'
def GROUP_ID = 'io.github.xxx'
def ARTIFACT_ID = 'JavaTools'
def VERSION_NAME = '0.0.1'
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/"
def nexusUsername = 'xxx'
def nexusPassword = 'xxx'
task sourceJar(type: Jar) {
if (hasAndroidPlugin()) {
println "======> Android"
from android.sourceSets.main.java.srcDirs
archiveClassifier = 'sources'
} else if (hasJavaPlugin()) {
println "======> Java"
from sourceSets.main.allSource
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 {
developer {
id = 'my_maven'
name = 'wangxiansheng'
email = '1441289824@qq.com'
}
}
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") {
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 {
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文件
# MavenCentral
signing.keyId=FCE86F1B
signing.password=155620110Qqq
# 私钥目录 我的是在项目里面
signing.secretKeyRingFile=./Admin_0xFCE86F1B_SECRET.gpg
ossrhUsername=my_maven
ossrhPassword=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
|