使用gradle将java项目推送至maven*仓库(最新版)

前言

maven*仓库于2024年3月进行改版,下面介绍新的推送方式


一、将项目推送到github

过程略

二、注册sonatype账号

仓库地址:https://central.sonatype.com/

这里选择使用github账号登录,不注册新的了
在这里插入图片描述

三、创建命名空间

在这里插入图片描述
这里会自动校验通过了一个github子域名,可以直接使用,就不用创建了
在这里插入图片描述

如需创建自己新的命名空间,需要有真实域名,并需要做验证,过程较繁琐。

四、创建token

在这里插入图片描述
在这里插入图片描述
拷贝生成的两串,待用

五、GPG生成秘钥

下载gpg生成工具,这里使用windows版
下载地址:https://www.gpg4win.org/get-gpg4win.html
安装完成后生成秘钥

1、生成key

gpg --gen-key

填写Real name(姓名)和Email Address(邮箱,最好用真实的,可用于密钥找回)
输入"O"回车,弹出弹窗,填写密码口令(自定义,后面会用到)两次,然后点击OK,密匙就创建好了

在这里插入图片描述
在这里插入图片描述
此处生成公钥:0773652F9BFCE458892BDCB38C0EC18E42A31653
这个公钥的后八位就是后面配置中的的signing.keyId(注意是后八位,这里也就是42A31653)
生成时设置的密码为后面配置中的signing.password

2、发布公钥

gpg --keyserver keyserver.ubuntu.com --send-keys 0773652F9BFCE458892BDCB38C0EC18E42A31653

如果出现发送失败的情况,可以选择其他服务器多次重试,总会成功的
*服务器支持的GPG密钥服务器有:
keyserver.ubuntu.com
keys.openpgp.org
pgp.mit.edu

验证公钥是否上传成功

gpg --keyserver keyserver.ubuntu.com --recv-keys 0773652F9BFCE458892BDCB38C0EC18E42A31653

在这里插入图片描述

3、导出key

gpg --export-secret-key 0773652F9BFCE458892BDCB38C0EC18E42A31653 > secret.gpg

过程中弹出密码输入框,输入创建时设置的密码
这里生成的secret.gpg文件就是后面配置中的signing.secretKeyRingFile

六、在项目的build.gradle中配置

如果使用build.gradle.kts可自行转换一些语法
可参考的的项目配置:https://github.com/iscasDmo/data-middle-office-sdk

引入插件sonatype-uploader

dependencies {
classpath group: 'io.github.jeadyx.sonatype-uploader', name: 'io.github.jeadyx.sonatype-uploader.gradle.plugin', version: '2.8'
}

应用插件maven-publish、signing、sonatype-uploader

 apply plugin: 'maven-publish'
 apply plugin: 'signing'
 apply plugin: 'io.github.jeadyx.sonatype-uploader'

group使用上面验证的域名

 group = 'io.github.iscasdmo'

配置publishing

 publishing {
        publications {
            mavenJava(MavenPublication) {
                groupId project.group
                artifactId project.name
                version project.version
                //若是war包,就写components.web,若是jar包,就写components.java
                from components.java
                pom {
                    // 构件名称
                    // 区别于artifactId,可以理解为artifactName
                    name = 'data-middle-office-sdk'
                    // 构件描述
                    description = '数据中台sdk'
                    // 构件主页
                    url = 'https://github.com/iscasDmo/data-middle-office-sdk'
                    // 许可证名称和地址
                    licenses {
                        license {
                            name = 'The Apache License, Version 2.0'
                            url = 'http://www.apache.org/licenses/LICENSE-2.0.txt'
                        }
                    }
                    // 开发者信息
                    developers {
                        developer {
                            id = 'iscas'
                            name = 'iscas'
                            email = '461402005@qq.com'
                        }
                    }
                    // 版本控制仓库地址
                    scm {
                        url = 'https://github.com/iscasDmo/data-middle-office-sdk'
                        connection = 'scm:git:https://github.com/iscasDmo/data-middle-office-sdk.git'
                        developerConnection = 'scm:git:https://github.com/iscasDmo/data-middle-office-sdk.git'
                    }
                }
            }
        }
        // 定义发布到哪里
        repositories {
            maven {
                url = layout.buildDirectory.dir('repo')
            }
        }
    }

修改其中的name、description、developsers、scm相关配置,其中url为github中项目地址;connection和developerConnection也对应github中项目git地址,前面多了scm:git:。

配置签名

 signing {
        sign publishing.publications.mavenJava
    }

在项目根目录gradle.properties中添加配置,值为GPG生成的

signing.keyId=ABC2E7F0
signing.password=Isc@s12345678
signing.secretKeyRingFile=C:/Users/admin/secret.gpg

配置sonatype-uploader

   sonatypeUploader {
        repositoryPath = layout.buildDirectory.dir("repo").get().asFile.path
        tokenName = "${tokenUsername}"
        tokenPasswd = "${tokenPassword}"
        signing = {
            it.keyId="${signing.keyId}"
            it.keyPasswd="${signing.password}"
            it.secretKeyPath="${signing.secretKeyRingFile}"
        }
        pom = {
            it.name = "data-middle-office-sdk"
            it.description = "数据中台sdk"
            it.url = "https://github.com/iscasDmo/data-middle-office-sdk"
            it.licenses {
                license {
                    name = "The Apache License, Version 2.0"
                    url = "http://www.apache.org/licenses/LICENSE-2.0.txt"
                }
            }
            it.developers {
                developer {
                    id = "iscas"
                    name = "iscas"
                    email = "461402005@qq.com"
                }
            }
            it.scm {
                connection = "scm:git:https://github.com/iscasDmo/data-middle-office-sdk.git"
                developerConnection = "scm:git:https://github.com/iscasDmo/data-middle-office-sdk.git"
                url = "https://github.com/iscasDmo/data-middle-office-sdk"
            }
        }
    }

其中tokenName和tokenPassword使用前面生成的。

完整配置参考:https://github.com/iscasDmo/data-middle-office-sdk

七、发布

先执行publishing,再执行publishToSonatype

在这里插入图片描述
去*仓库查看

在这里插入图片描述
刚推送时这里显示publishing,等待一段时间(少则几分钟,多则一两天),变成published,就可以使用maven/gradle坐标引用了。

在这里插入图片描述
在搜索栏搜索
在这里插入图片描述
点进去查看引用坐标
在这里插入图片描述
在这里插入图片描述

上一篇:【WPF】04 Http消息处理类-案例


下一篇:设计一个支持自动化测试执行的测试框架