Gradle发布项目到Maven中央仓库
参考文章:`https://blog.csdn.net/qq_41011894/article/de
渲染中...
参考文章:`https://blog.csdn.net/qq_41011894/article/details/123406711`
## 注册sonatype账号
- 访问:`https://issues.sonatype.org/`,未登录情况下直接会有登录输入框,无账号时点击`sign up`进入注册页面
- 注册账号,如下图:依次输入邮箱、全名、账号、密码。其中`邮箱`很重要!后续验证时频繁使用;`账号`和`密码`为登录使用;`全名`可以随意输入。
- 
- 注册成功后,邮箱会收到注册成功的邮件,如下
- 
<!-- 文章内嵌广告位 -->
<div class="article-ads"></div>
<!-- more -->
## 新建sonatype问题【项目】
### 填写基本信息
- 注册完`sonatype`账号后登录,直接点击标题栏的`新建`按钮,默认选中的新建项目,如下两图:
- 
- 
- 填写带`*`的必填项,其中`Group Id`、`Project URL`、`SCM 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``帐号是你本人的。
- 此时,问题的状态会变为审核中,需要根据回复的信息操作后,重新打开问题,等待审核员进一步确认。
- 审核回复信息如下

- 可以看到第一条说的很明确,即创建一个名为`OSSRH-80997`的仓库。
- 第二条是因为我申请时,``Group ID``填写的不是`io.github.dingdangdog`,管理员让你修改后,将该问题的状态改为``open``。
## 审核通过
按照第一次审核回复的信息,操作完成后,问题的状态改为`Open`,等待二次确认,如果确认成功,会收到邮件和回复,回复信息如下。

- 此时,你的一小步算是完成了。
<!-- 文章内嵌广告位 -->
<div class="article-ads"></div>
## 小结
- 经过上面的操作,你已经可以进行项目发布了,审核成功的通知中,也进行了说明,并给出了官方教程文档地址:`https://central.sonatype.org/publish/publish-guide/#deployment`
- 提前总结一下后续需要做的工作:
- 1、创建专属密钥,并上传;
- 2、在项目中配置发布脚本;
- 3、配置密钥、帐号等信息;
- 4、运行发布脚本;
- 5、到个人仓库中,完成发布。
## 创建密钥
### 下载 GPG 密钥工具
> 下载地址:`https://www.gpg4win.org/download.html`
- 下载完成后安装,`windows`会自带可视化工具`Kleopatra`,后续操作会相对简单。
### 创建密钥
- 安装完成后,运行`Kleopatra`,点击`文件` > `新建密钥对`,弹出如下创建向导

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


<!-- 文章内嵌广告位 -->
<div class="article-ads"></div>
### 认证,发布
- 密钥创建成功后,邮件出现如下选想,先认证,后发布。发布成功后,点击`服务器上查找...`,输入名称可以查到已上传的密钥。

- 按照我的理解,经过上述操作,密钥申请上传就完事了,但是后续步骤时仍然出现服务器找不到密钥的情况,所以我使用如下命令(``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位即可。


### 生成gpg文件
- 如果创建密钥时,设置了密码保护,此部需要输入密码。

<!-- 文章内嵌广告位 -->
<div class="article-ads"></div>
## 配置发布脚本
上述密钥操作成功后,需要到项目中配置相关脚本,并将密钥、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
}
```
<!-- 文章内嵌广告位 -->
<div class="article-ads"></div>
## 上传项目
### 执行脚本
- 上述配置脚本配置完毕后,刷新gradle,在idea窗口中,可以找到如下发布快捷入口
- 
- 双击`publish`即可自动发布。发布成功后,出现如下信息
- 
- 往往在发布脚本运行会报错,出现错误不要急,多思考一下,理清流程,发现问题并解决他!
### Close
- 运行完脚本后,项目还没真正公开,需要到个人仓库中完成发布。
- 打开如下网址,并使用`sonatype`帐号登录。
- `https://s01.oss.sonatype.org/#welcome`
- 依次点击`Staging Repostories` - `勾选项目` - `close`。成功后状态`Activity`会改变为`Operation in progress`正在运行,其实他正在检测你发布的程序。
- 
#### Close失败
- 点击`close`后,他会运行一段时间,验证你发布的项目是否符合规范,不符合规范会报错,如下图,我第一次发布时报的错。

- 我这个报错原因是,我把发布脚本中``javadoc``相关的脚本给注释掉了,没有发布``javadoc``相关信息,当时`publish`是成功了,但是到这一步又出现问题了,所以还是不能偷懒啊。。。(``PS:因为发布`javadoc`会校验你的注释是否规范,不规范的情况下会报很多错,我就想着不发布`javadoc`试试,还真的发布成功了``)
<!-- 文章内嵌广告位 -->
<div class="article-ads"></div>
## Release
- 把`Close`报错全部解决后,重新运行上传脚本`publish`,然后重新`Close`,如果还报错,就重复以上步骤,直到`Close`成功后,`Release`亮起!
- 点击`Release`

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

- 根据运行结果
## 总结
- 整个流程还是相对复杂的,需要较好的耐心。
- 不要急躁,我花了两天时间才把整个流程跑下来。
- 经过整个流程,可以学到Maven仓库的管理和发布的基本操作,还是很有意义的。
- 一起努力吧,走出自己的安逸窝,外面的世界更精彩。
**写这篇文章时,我也是第一次发布项目,边写边走流程,如果有写的不对或不好的地方,欢迎批评指正。**
## 赞助请求V3
**建站因为热爱,生活需要Money,请屏幕前的大佬动动您发财的小手,点击一次以示鼓励,祝您生活愉快!**
<!-- 文章内嵌广告位 -->
<div class="article-ads"></div>
> PS:就目前的访问量,即便每个访客都点一次广告,收入也不足以支付运营成本。`如果看不到广告,可能是网络原因或被拦截了,那就算了吧。再次祝您生活愉快~~`END
评论
登录后查看和发表评论
前往登录