写一个SVGView,并上传到Maven下

上文主要写了去定义了一个SVGView,没看过可以看一下

# 写一个SVGView,并上传到Maven上

接下来如何上传到maven上面,供大家使用呢,其实在Gradle文件中导入的依赖本质上是一个AAR包,不过是这个包在云端,可以通过Gradle下载下来而已,和手动导入AAR没什么区别,下面来看一下如何上传

1.检查项目

第一是看有没有BUG崩溃的情况,其次是检查有没有内存泄漏的情况,这里我用的是Leakcanary
第二检查项目有没有引入没必要的文件,比如上文写的SVGView,我只导入了一个

1686615015292(1).jpg

2.注册账号

首先进入sonatype注册一个账号,然后新建一个项目
注册账号点击这里
然后进入会出现这么一个弹框

image.png
可以看到他已经给出出了示例
其中GroupId,这里贴出文档给出示例规则,这里一开始笔者写错了两次,后来仔细看了一文档才走通

image.png官网文档点击这里

然后Project URL,SCM url就填写你的项目地址就可以,然后提交一下,不懂得可以参考笔者的填写示例:

image.png
接下来就可以提交审核了,一般来说如果你写的都没问题的话,审核员会让你在的项目地址的地方创建一个临时的文件库,来验证你是否拥有这个账号的控制权,看一下审核员给我回复的评论:

image.png
可以看到他让我创建了:<https://github.com/zhaojfgithub/OSSRH-92076>这个临时存储库,创建好之后回复他一下,等着就行了,没什么意外就可以通过了变成这样:

image.png
至此就可以配置上传的相关事宜了

注册配置GPG

算了,这里就看这一篇文章把,笔者时用命令行搞得,贼墨迹,我的一键时不如图像化界面,很方便

# Android库发布到Maven Central全攻略

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项目地址的时候,管理员给你回复的地址,比如我的:

image.png
所以我的releasesRepoUrl = “s01.oss.sonatype.org/service/loc…“,
snapshotsRepoUrl也是同理,

然后就配置一下账号密码之类的,还有GPG的key,这个一般在local.properties文件内,因为一般不会设置它上传到网上,如果你自己额外创建一个文件也是可以的

image.png
配置完成后就可以打包了

4.配置完成后就可以打包了

笔者的Android studio版本是Android Studio Flamingo | 2022.2.1

image.png
依次点击assemblepublishReleasePublicationToMavenCentralRepository就可以了,其中assemble的作用是把aar包打出来publishReleasePublicationToMavenCentralRepository是上传到maven库,aar的地址是在上文配置的地方,比如artifact("$buildDir/outputs/aar/${project.getName()}-release.aar")
什么你的gradle没有assemble选项,修改一下设置应该就可以了

image.png

5.上传

s01.oss.sonatype.org/#welcome 点击这个网址,账号密码就是你上面注册maven的那个账号密码,然后点击Staging Repositiones然后Refresh,当列表有文件出来后,选中文件,依次点击cloneRelease,
image.png
的等待20分钟左右就可以在search.maven.org/ 搜搜你上传的项目,就可以了

友情提示:建议先打包成aar,然后新建一个项目导入看是否有问题,然后上传之后再通过gradle导入测试看看,免的别人使用后造成不可预估的情况,为什么,你猜我的为什么是0.0.3

总结

至此就全部完成了,自己写的时候虽然网上有不少样例,但是总体下来,还是踩了不少坑,其中上传报错,注意多看看maven的文档,所有的错误都是自己粗心造成的,在报错看看gradle的配置,什么你的aar文件没生成,建议检查一下路径,上传报错了443,建议看一个官方文档

参考

# Android库发布到Maven Central全攻略

© 版权声明
THE END
喜欢就支持一下吧
点赞0

Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MYj9oRwq' (Errcode: 28 - No space left on device) in /www/wwwroot/583.cn/wp-includes/class-wpdb.php on line 2345
admin的头像-五八三
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

图形验证码
取消
昵称代码图片