上文主要写了去定义了一个SVGView,没看过可以看一下
接下来如何上传到maven上面,供大家使用呢,其实在Gradle文件中导入的依赖本质上是一个AAR包,不过是这个包在云端,可以通过Gradle下载下来而已,和手动导入AAR没什么区别,下面来看一下如何上传
1.检查项目
第一是看有没有BUG崩溃的情况,其次是检查有没有内存泄漏的情况,这里我用的是Leakcanary
第二检查项目有没有引入没必要的文件,比如上文写的SVGView,我只导入了一个
2.注册账号
首先进入sonatype注册一个账号,然后新建一个项目
注册账号点击这里
然后进入会出现这么一个弹框
可以看到他已经给出出了示例
其中GroupId,这里贴出文档给出示例规则,这里一开始笔者写错了两次,后来仔细看了一文档才走通
然后Project URL
,SCM url
就填写你的项目地址就可以,然后提交一下,不懂得可以参考笔者的填写示例:
接下来就可以提交审核了,一般来说如果你写的都没问题的话,审核员会让你在的项目地址的地方创建一个临时的文件库,来验证你是否拥有这个账号的控制权,看一下审核员给我回复的评论:
可以看到他让我创建了:<https://github.com/zhaojfgithub/OSSRH-92076>
这个临时存储库,创建好之后回复他一下,等着就行了,没什么意外就可以通过了变成这样:
至此就可以配置上传的相关事宜了
注册配置GPG
算了,这里就看这一篇文章把,笔者时用命令行搞得,贼墨迹,我的一键时不如图像化界面,很方便
3.配置Gradle
这里把我的publish.gradle copy下来
apply plugin: 'maven-publish'
apply plugin: 'signing'
task androidSourcesJar(type: Jar) {
archiveClassifier.set('sources')
from android.sourceSets.main.java.srcDirs
exclude "**/R.class"
exclude "**/BuildConfig.class"
}
ext {
PUBLISH_GROUP_ID = 'io.github.zhaojfGithub.SVGView'
PUBLISH_VERSION = '0.0.3'
}
ext["signing.keyId"] = ''
ext["signing.password"] = ''
ext["signing.secretKeyRingFile"] = ''
ext["ossrhUsername"] = ''
ext["ossrhPassword"] = ''
File secretPropsFile = project.rootProject.file('local.properties')
if (secretPropsFile.exists()) {
println "Found secret props file, loading props"
Properties p = new Properties()
p.load(new FileInputStream(secretPropsFile))
p.each { name, value ->
ext[name] = value
}
} else {
println "No props file, loading env vars"
}
publishing {
publications {
release(MavenPublication) {
// The coordinates of the library, being set from variables that
// we'll set up in a moment
groupId PUBLISH_GROUP_ID
artifactId PUBLISH_ARTIFACT_ID
version PUBLISH_VERSION
// Two artifacts, the `aar` and the sources
artifact("$buildDir/outputs/aar/${project.getName()}-release.aar")
artifact androidSourcesJar
// Self-explanatory metadata for the most part
pom {
name = PUBLISH_ARTIFACT_ID
description = 'SVGView'
// If your project has a dedicated site, use its URL here
url = 'https://github.com/zhaojfGithub/SVGView'
licenses {
license {
//协议类型,一般默认Apache License2.0的话不用改:
name = 'The Apache License, Version 2.0'
url = 'http://www.apache.org/licenses/LICENSE-2.0.txt'
}
}
developers {
developer {
id = '用户名'
name = '用户名'
email = '邮箱'
}
}
// Version control info, if you're using GitHub, follow the format as seen here
scm {
//修改成你的Git地址:
connection = 'scm:git:github.com/zhaojfGithub/SVGView.git'
developerConnection = 'scm:git:ssh://github.com/zhaojfGithub/SVGView.git'
//分支地址:
url = 'https://github.com/zhaojfGithub/SVGView/tree/main'
}
// A slightly hacky fix so that your POM will include any transitive dependencies
// that your library builds upon
withXml {
def dependenciesNode = asNode().appendNode('dependencies')
project.configurations.implementation.allDependencies.each {
def dependencyNode = dependenciesNode.appendNode('dependency')
dependencyNode.appendNode('groupId', it.group)
dependencyNode.appendNode('artifactId', it.name)
dependencyNode.appendNode('version', it.version)
}
}
}
}
}
repositories {
// The repository to publish to, Sonatype/MavenCentral
maven {
// This is an arbitrary name, you may also use "mavencentral" or
// any other name that's descriptive for you
name = "mavenCentral"
def releasesRepoUrl = "https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/"
def snapshotsRepoUrl = "https://s01.oss.sonatype.org/content/repositories/snapshots/"
// You only need this if you want to publish snapshots, otherwise just set the URL
// to the release repo directly
url = version.endsWith('SNAPSHOT') ? snapshotsRepoUrl : releasesRepoUrl
// The username and password we've fetched earlier
credentials {
username ossrhUsername
password ossrhPassword
}
}
}
}
signing {
sign publishing.publications
}
把需要替换得替换一下,值得注意得是,配置releasesRepoUrl =
,snapshotsRepoUrl
的时候,一定要看清楚在创建maven项目地址的时候,管理员给你回复的地址,比如我的:
所以我的releasesRepoUrl
= “s01.oss.sonatype.org/service/loc…“,
snapshotsRepoUrl
也是同理,
然后就配置一下账号密码之类的,还有GPG的key,这个一般在local.properties
文件内,因为一般不会设置它上传到网上,如果你自己额外创建一个文件也是可以的
配置完成后就可以打包了
4.配置完成后就可以打包了
笔者的Android studio版本是Android Studio Flamingo | 2022.2.1
依次点击assemble
和publishReleasePublicationToMavenCentralRepository
就可以了,其中assemble
的作用是把aar包打出来publishReleasePublicationToMavenCentralRepository
是上传到maven库,aar的地址是在上文配置的地方,比如artifact("$buildDir/outputs/aar/${project.getName()}-release.aar")
什么你的gradle没有assemble
选项,修改一下设置应该就可以了
5.上传
s01.oss.sonatype.org/#welcome 点击这个网址,账号密码就是你上面注册maven的那个账号密码,然后点击Staging Repositiones
然后Refresh
,当列表有文件出来后,选中文件,依次点击clone
和Release
,
的等待20分钟左右就可以在search.maven.org/ 搜搜你上传的项目,就可以了
友情提示:建议先打包成aar,然后新建一个项目导入看是否有问题,然后上传之后再通过gradle导入测试看看,免的别人使用后造成不可预估的情况,为什么,你猜我的为什么是0.0.3
总结
至此就全部完成了,自己写的时候虽然网上有不少样例,但是总体下来,还是踩了不少坑,其中上传报错,注意多看看maven的文档,所有的错误都是自己粗心造成的,在报错看看gradle的配置,什么你的aar文件没生成,建议检查一下路径,上传报错了443,建议看一个官方文档