2024-05-25
温故知新
00
请注意,本文编写于 198 天前,最后修改于 198 天前,其中某些信息可能已经过时。

目录

注册sonatype账号
新建sonatype问题【项目】
填写基本信息
申请成功,复核
审核通过
小结
创建密钥
下载 GPG 密钥工具
创建密钥
认证,发布
生成gpg文件
配置发布脚本
gradle.properties
build.gradle
上传项目
执行脚本
Close
Close失败
Release
成功!
总结
赞助请求V3

参考文章:https://blog.csdn.net/qq_41011894/article/details/123406711

注册sonatype账号

  • 访问:https://issues.sonatype.org/,未登录情况下直接会有登录输入框,无账号时点击sign up进入注册页面
  • 注册账号,如下图:依次输入邮箱、全名、账号、密码。其中邮箱很重要!后续验证时频繁使用;账号密码为登录使用;全名可以随意输入。
  • alt
  • 注册成功后,邮箱会收到注册成功的邮件,如下
  • alt

新建sonatype问题【项目】

填写基本信息

  • 注册完sonatype账号后登录,直接点击标题栏的新建按钮,默认选中的新建项目,如下两图:
  • alt
  • alt
  • 填写带*的必填项,其中Group IdProject URLSCM url需要注意:
    • Group Id:github项目可以使用io.github.[username]其中[username]为替换为自己github的用户名,比如我的github用户名是DingDangDog,我则填写io.github.dingdangdog。可以自定义其他名称,详细可阅读官方文档:https://central.sonatype.org/publish/requirements/coordinates/
    • Project URL:github项目地址,如:https://github.com/DingDangDog/db-init
    • SCM url:github项目代码下载地址,如:https://github.com/DingDangDog/db-init.git
  • 信息填写完毕后确定新建,即可等待官方人员答复。

申请成功,复核

信息填写无误后,网站审核员会回复你一个邮件,在网站问题页面也会有相同的回复内容。 简单来说,就是需要在你的github上创建一个指定的仓库,来确认该github帐号是你本人的。

  • 此时,问题的状态会变为审核中,需要根据回复的信息操作后,重新打开问题,等待审核员进一步确认。
  • 审核回复信息如下

alt

  • 可以看到第一条说的很明确,即创建一个名为OSSRH-80997的仓库。
  • 第二条是因为我申请时,Group ID填写的不是io.github.dingdangdog,管理员让你修改后,将该问题的状态改为open

审核通过

按照第一次审核回复的信息,操作完成后,问题的状态改为Open,等待二次确认,如果确认成功,会收到邮件和回复,回复信息如下。 alt

  • 此时,你的一小步算是完成了。

小结

  • 经过上面的操作,你已经可以进行项目发布了,审核成功的通知中,也进行了说明,并给出了官方教程文档地址:https://central.sonatype.org/publish/publish-guide/#deployment
  • 提前总结一下后续需要做的工作:
    • 1、创建专属密钥,并上传;
    • 2、在项目中配置发布脚本;
    • 3、配置密钥、帐号等信息;
    • 4、运行发布脚本;
    • 5、到个人仓库中,完成发布。

创建密钥

下载 GPG 密钥工具

下载地址:https://www.gpg4win.org/download.html

  • 下载完成后安装,windows会自带可视化工具Kleopatra,后续操作会相对简单。

创建密钥

  • 安装完成后,运行Kleopatra,点击文件 > 新建密钥对,弹出如下创建向导

alt

  • 出现下图时,建议选中使用密码句保护生成的密钥,选中后,导出密钥等操作需要输入密码确认,更加安全些。
  • 并建议打开高级设置,将加密算法改为RSA,我刚开始使用默认的算法,总是不成功,参考了文章才解决:https://www.e-learn.cn/topic/1343735alt alt

认证,发布

  • 密钥创建成功后,邮件出现如下选想,先认证,后发布。发布成功后,点击服务器上查找...,输入名称可以查到已上传的密钥。 alt
  • 按照我的理解,经过上述操作,密钥申请上传就完事了,但是后续步骤时仍然出现服务器找不到密钥的情况,所以我使用如下命令(CMD运行即可),重新上传了密钥。
shell
# 将公钥发布到GPG密钥服务器 gpg --keyserver hkp://keyserver.ubuntu.com:11371 --send-keys 公钥ID # 查询是否已将公钥发布到服务器 gpg --keyserver hkp://keyserver.ubuntu.com:11371 --recv-keys 公钥ID
  • 其中公钥ID,我使用的是上图打码的密钥ID,通过在密钥上 右键 - 细节 - 导出,可以看到如下弹窗,复制指纹后16位即可。

alt

alt

生成gpg文件

  • 如果创建密钥时,设置了密码保护,此部需要输入密码。 alt

配置发布脚本

上述密钥操作成功后,需要到项目中配置相关脚本,并将密钥、maven帐号等相关信息配置好。下面直接贴出我的配置

gradle.properties

  • 新建名为gradle.properties的文件,内容如下,注意填写自己的信息。
shell
sonatypeUsername= # 最开始注册测sonatype帐号 sonatypePassword= # sonatype密码 signing.keyId= # 密钥ID(指纹)后8位 signing.password= # 密钥保护密码 signing.secretKeyRingFile=E:/**/secring.gpg # 创建密钥最后一步生成的gpg文件目录

build.gradle

  • 要发布的项目,的配置文件
kotlin
jar.enabled=true apply plugin: 'maven-publish' apply plugin: 'signing' group 'io.github.dingdangdog' version '1.0' task sourcesJar(type: Jar) { from sourceSets.main.allJava archiveClassifier = 'sources' } task javadocJar(type: Jar) { from javadoc classifier = 'javadoc' } sourceSets.main.resources.srcDirs = ["src/main/java","src/main/resources"] dependencies { compile 'org.springframework.boot:spring-boot-starter-aop', 'org.springframework.boot:spring-boot-configuration-processor', 'org.apache.httpcomponents:httpclient:4.5.8', 'org.apache.httpcomponents:httpmime:4.3.1', 'io.jsonwebtoken:jjwt:0.7.0', 'com.itranswarp:compiler:1.0' } publishing { publications { mavenJava(MavenPublication) { groupId project.group artifactId project.name version project.version //若是war包,就写components.web,若是jar包,就写components.java from components.java // artifact shadowJar artifact sourcesJar artifact javadocJar pom { // 构件名称 // 区别于artifactId,可以理解为artifactName name = 'db-init' // 构件描述 description = 'springboot数据库初始化插件' // 构件主页 url = 'https://github.com/DingDangDog/db-init' // 许可证名称和地址 licenses { license { name = 'MIT License' url = 'https://mit-license.org/' } } // 开发者信息 developers { developer { name = 'DingDangDog' email = '****@qq.com' } } // 版本控制仓库地址 scm { url = 'https://github.com/DingDangDog/db-init' connection = 'scm:git:https://github.com/DingDangDog/db-init.git' developerConnection = 'scm:git:https://github.com/DingDangDog/db-init.git' } } } } // 定义发布到哪里 repositories { maven { name 'db-init' // url "https://oss.sonatype.org/service/local/staging/deploy/maven2" url "https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/" credentials { // 这里就是之前在issues.sonatype.org注册的账号 username = "${sonatypeUsername}" password = "${sonatypePassword}" } } } } signing { sign publishing.publications.mavenJava } javadoc { // <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> // 防止本地打开中文乱码 // options.addStringOption("charset", "UTF-8") options.encoding = "UTF-8" failOnError = false }

上传项目

执行脚本

  • 上述配置脚本配置完毕后,刷新gradle,在idea窗口中,可以找到如下发布快捷入口
  • alt
  • 双击publish即可自动发布。发布成功后,出现如下信息
  • alt
  • 往往在发布脚本运行会报错,出现错误不要急,多思考一下,理清流程,发现问题并解决他!

Close

  • 运行完脚本后,项目还没真正公开,需要到个人仓库中完成发布。
  • 打开如下网址,并使用sonatype帐号登录。
  • https://s01.oss.sonatype.org/#welcome
  • 依次点击Staging Repostories - 勾选项目 - close。成功后状态Activity会改变为Operation in progress正在运行,其实他正在检测你发布的程序。
  • alt

Close失败

  • 点击close后,他会运行一段时间,验证你发布的项目是否符合规范,不符合规范会报错,如下图,我第一次发布时报的错。 alt
  • 我这个报错原因是,我把发布脚本中javadoc相关的脚本给注释掉了,没有发布javadoc相关信息,当时publish是成功了,但是到这一步又出现问题了,所以还是不能偷懒啊。。。(PS:因为发布`javadoc`会校验你的注释是否规范,不规范的情况下会报很多错,我就想着不发布`javadoc`试试,还真的发布成功了

Release

  • Close报错全部解决后,重新运行上传脚本publish,然后重新Close,如果还报错,就重复以上步骤,直到Close成功后,Release亮起!
  • 点击Release alt

成功!

  • Release成功后,可以搜索到自己的项目了!但是此时可能还无法立即根据坐标引用自己的依赖,据说需要过10分钟左右才能真正发布到中央仓库。

alt

  • 根据运行结果

总结

  • 整个流程还是相对复杂的,需要较好的耐心。
  • 不要急躁,我花了两天时间才把整个流程跑下来。
  • 经过整个流程,可以学到Maven仓库的管理和发布的基本操作,还是很有意义的。
  • 一起努力吧,走出自己的安逸窝,外面的世界更精彩。

写这篇文章时,我也是第一次发布项目,边写边走流程,如果有写的不对或不好的地方,欢迎批评指正。

赞助请求V3

建站因为热爱,生活需要Money,请屏幕前的大佬动动您发财的小手,点击一次以示鼓励,祝您生活愉快!

PS:就目前的访问量,即便每个访客都点一次广告,收入也不足以支付运营成本。如果看不到广告,可能是网络原因或被拦截了,那就算了吧。再次祝您生活愉快~~

如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:DingDangDog

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!