• MavenCentral库发布记录


    最近发布了 Android 路由库 URouter,支持 AGP8、ActivityResult启动等特性。
    把提交到 Maven Central 过程记录一下。

    一、注册 Sonatype 账号,新建项目

    注册
    https://​​issues.sonatype.org

    登录后,新建项目:

    相关选项,选择:

    • 项目:Community Support - Open Source Project - Repository Hosting (OSSRH)
    • 类型:New Project
    • 概要:填写 Git 项目名即可
    • Group Id: Github项目,io.github.xxx 用户名
    • Project URL: 填写 github 项目主页
    • SCM url: 填 github项目地址 + .git

    在这里插入图片描述
    在这里插入图片描述

    点击提交后,等待 3-5分钟 回复,验证 github 所有权。

    • 在自己项目里,在 github 创建 回复的 仓库
    • 创建完成后,回复评论,大概意思就是即可: 仓库已创建

    在这里插入图片描述

    等待5-10分钟后,验证成功

    这时候,就有上传到 sonatype nexus 仓库权限了

    二、准备 GPG 密钥

    GPG 来生成 密钥,安装 GPG
    Windows下使用scoop安装:

    scoop install gpg
    
    gpg --generate-key
    
    gpg --list-keys
    
    • 1
    • 2
    • 3
    • 4
    • 5

    这里获取到pub公钥,

    在这里插入图片描述

    创建完成,–list-keys 显示 pub 第二方 一串:
    67E95C8F2931C822********************F7E9
    后面用于 上传和验证 公钥

    上传公钥

    gpg --keyserver hkp://keyserver.ubuntu.com:11371 --send-keys 
    67E95C8F2931C822********************F7E9
    
    # 验证是否上传功能,后 8 位即可
    gpg --keyserver hkp://keyserver.ubuntu.com:11371 --recv-keys ****F7E9
    
    • 1
    • 2
    • 3
    • 4
    • 5

    导出密钥,后面签名用

    gpg --export-secret-keys 67E95C8F2931C822********************F7E9 > secret.gpg
    
    • 1

    三、Gradle项目配置

    本地发布和远程发布,需要 maven-publish 插件,
    GPG为了签名,需要 signing 插件。项目模块 build.gradle 配置:

    plugins {
        id 'maven-publish'
        id 'signing'
    }
    
    • 1
    • 2
    • 3
    • 4

    添加后,gradle 就多了 publish 任务:

    在这里插入图片描述

    配置发布

    添加maven-publish后,开始配置 publishing 代码块

    // 配置发布后 groupId,默认 artifactId 是项目模块名
    group = 'org.example'
    version = '1.0'
    
    task sourcesJar(type: Jar) {
        classifier = 'sources'
        from sourceSets.main.allSource
    }
    
    task javadocJar(type: Jar) {
        classifier = 'javadoc'
        from javadoc.destinationDir
    }
    
    publishing {
        publications {
            release(MavenPublication) {
                // 配置POM信息
                pom {
                    name = project.name
                    description = 'xxx'
                    url = 'https://github.com/xxx/xxx'
                    // 开源协议
                    licenses {
                        license {
                            name = 'The Apache License, Version 2.0'
                            url = 'http://www.apache.org/licenses/LICENSE-2.0.txt'
                        }
                    }
    
                    // 配置开发者信息
                    developers {
                        developer {
                            id = 'xxx'
                            name = 'xxx'
                            email = 'xxx@163.com'
                        }
                    }
    
                    // scm
                    scm {
                        connection = 'https://github.com/xxx/xxx.git'
                        developerConnection = 'https://github.com/xxx/xxx.git'
                        url = 'https://github.com/xxx/xxx'
                    }
                }
    
                // 发布文档 JAR
                artifact javadocJar
                // 发布源码 JAR
                artifact sourcesJar
    
                from components.java
            }
        }
    
        repositories {
            maven {
                url "https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/"
                credentials {                
                    username project.sonaUsername // sonatype username
                    password project.sonaPassword // sonatype password
                }
            }
        }
    }
    
    signing {
        sign publishing.publications.release
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    配置 sonatype 账号 和 GPG密钥

    上面配置,还不能直接使用,在 gradle.properties 配置用到的 变量:

    对于密码信息,可以放到 用户目录下的 gradle.properties,
    Windows下是:

    C:\Users\用户名\.gradle\gradle.properties
    
    • 1

    添加 账号信息:

    # sonatype 账号信息
    sonaUsername=xxxx
    sonaPassword=xxxx
    # GPG Signing Info
    signing.keyId=XXXXXXXX
    signing.password=xxxxxx
    # 上面导出的 GPG 密钥路径
    signing.secretKeyRingFile=C:\\Users\\username\\.gpg\\secret.gpg
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    四、发布到仓库

    项目下执行命令进行发布:

    .\gradlew.bat publish
    
    • 1

    发布成功后,进入 snoatype nexus 后台,管理发布:
    https://s01.oss.sonatype.org/#stagingRepositories

    在这里插入图片描述

    1. 在 Staging Repositories,勾选发布的仓库,点击Close并确定
    2. 稍等几分钟,验证通过,点 Release
    3. 10-30分钟后,会在 Maven Central 同步更新
    • 可在 https://mvnrepository.com/ 搜索查看库

    文档

    • Android 发布: https://developer.android.com/build/publish-library/upload-library
    • https://blog.51cto.com/u_12853553/5896541
  • 相关阅读:
    TCP-4次挥手小记
    给 「大模型初学者」 的 LLaMA 3 核心技术剖析
    Centos安装Docker
    Ubuntu系统自动清理系统内存脚本和使用方法
    【初识 Docker | 基础篇】 Docker 镜像
    初始化一个Android项目时,Android Studio会自动生成一些文件和目录结构,以帮助你快速上手开发
    使用示波器探头的五个有效步骤
    PHP Swoole实现简易聊天室,附加小程序端连接websocket简易代码
    C++ 基础入门 之 算数运算符+-x/%++/赋值运算符=/比较运算符><=/逻辑运算符!&&||
    WPF 控件专题 DockPanel 控件详解
  • 原文地址:https://blog.csdn.net/w709835509/article/details/132621460