# 发布Jar到Maven中央仓库(详细流程)
# 前言
当我们在编写出比较好用的一些工具时,往往我们想让其他开发者方便快捷的使用。
现阶段最为流行的是以Maven管理我们项目中的Jar包,而发布到Maven中央仓库有着各种各样的坑,网上有一大堆教程,相对而言我在看的时候也综合了很多篇文章所总结出可行的方案。避免各位大大踩坑浪费时间。
需要用到的网站
https://issues.sonatype.org/login.jsp
https://oss.sonatype.org
# 流程
- 注册sonatype账号
- 申请工单
- 通过审核
- 下载gpg签名插件
- 编辑Maven配置文件
- 执行上传命令(自动签名)
- 登录OSS仓库查看是否通过
- Close项目,预发布
- Release 发布项目
步骤比较麻烦的是gpg签名插件这一块,还有编辑Maven配置文件这一块,其他的一般按照流程走没有太大问题,其他的坑会在流程中详细注明。
# 开始
# 1.注册sonatype账号
访问 https://issues.sonatype.org/login.jsp
先注册一个账号,记住账号的用户名和密码,之后会经常用到。


注册完成后,用你注册的账号登录。
首次登录会让你选择语言,建议使用中文。
当然了,如果你觉得你的英文水平特别好,那么你也可以选择英文。

如果你选择了英文但是后悔了,可以到这里修改。


请不要让我知道,你做了后面这步,不然我会笑的。
# 2.申请工单
注册完账号,我们需要新建一个工单。
直接访问这个地址:
https://issues.sonatype.org/secure/CreateIssue.jspa?issuetype=21&pid=10134

概要
填写你的项目名称
Group Id
填写你的网站前缀,注意这里一定要填写正确,不然审核不通过。如果没有个人域名,使用github也是可以的。
例如:com.github.username、com.starmcc
Project URL
填写你的项目开源地址,如果是github直接填写你github的项目首页地址。
例如:https://github.com/starmcc/demo-project
SCM url
项目源码仓库,填写你在github上该项目的clone地址。
例如:https://github.com/starmcc/demo-project.git
其他内容不用填写,默认即可。然后点击新建。
新建问题后,一般一个工作日内会有回复,请留意这里。

# 3.通过审核
一般第一次回复你会是如下所示:

意思是您是不是该域名的拥有者,然后根据他的提示,去自己的域名添加一段解析:
类型为TXT 内容为ticket后面的那段连接。
搞定后你需要回复一下官方客服:This is my domain name, has added TXT
如果你是用的github的情况下会直接出现这个回复。

证明已经通过审核了。
# 4.下载gpg签名插件
https://www.gpg4win.org/download.html
访问上述地址下载并安装 windows版的gpg签名插件。
安装完成后,使用命令创建一个秘钥。
gpg --gen-key
生成密钥时将需要输入name、email以及password。
必须要使用你第一步注册的用户名进行签名
password在之后的步骤需要用到,请记下来。
通过 gpg –-list-keys
可以查看你生成的秘钥。

上传秘钥到公共服务器
这样Maven仓库才可以通过公钥来验证jar包是否完整。
上传命令
gpg --keyserver hkp://pool.sks-keyservers.net --send-keys 你生成的秘钥
或者
gpg --send-keys 你生成的秘钥 --keyserver hkp://pool.sks-keyservers.net
验证是否上传成功命令
gpg --keyserver hkp://pool.sks-keyservers.net --recv-keys 你生成的秘钥
或者
gpg --recv-keys 你生成的秘钥 --keyserver hkp://pool.sks-keyservers.net
# 5.编辑Maven配置文件
# Step.1
首先我们找到我们安装的Maven的路径,找到setting.xml
,找不到的上网搜一下文件在哪里。
配置servers节点
<servers>
<server>
<id>ossrh</id>
<username>username</username>
<password>password</password>
</server>
</servers>
2
3
4
5
6
7
用户名和密码填写你第一步注册的用户名和密码。
# Step.2
编辑要上传的项目中的pom.xml
文件。
需要注意,pom.xml 要规范化,name、groupId、artifactId、version、url、description这些节点必须填写。
<name>项目名</name>
<groupId>必须填写你申请工单一致的groupId</groupId>
<artifactId>项目名</artifactId>
<version>0.0.1</version>
<url>项目地址</url>
<description>项目描述</description>
2
3
4
5
6
配置oss-parent,这样好处就是可以省略很多配置。
<parent>
<groupId>org.sonatype.oss</groupId>
<artifactId>oss-parent</artifactId>
<version>8</version>
</parent>
2
3
4
5
添加认证信息,注意scm需要正确填写。
<!-- licenses证书 -->
<licenses>
<license>
<name>The Apache Software License, Version 2.0</name>
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
<distribution>repo</distribution>
</license>
</licenses>
<!-- scm -->
<scm>
<url>项目地址</url>
<connection>项目仓库地址.git</connection>
<developerConnection>开发者的首页</developerConnection>
</scm>
<!-- oss提交maven -->
<distributionManagement>
<repository>
<id>ossrh</id>
<url>https://oss.sonatype.org/service/local/staging/deploy/maven2</url>
</repository>
<snapshotRepository>
<id>ossrh</id>
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
</snapshotRepository>
</distributionManagement>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
在bulid节点中添加pgp签名插件
<!--签名插件-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<version>1.5</version>
<executions>
<execution>
<id>sign-artifacts</id>
<phase>verify</phase>
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
</plugin>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
完整的bulid节点示例
<build>
<plugins>
<!-- java版本 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<!-- 这是javadoc打包插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.9.1</version>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
<!-- 该处屏蔽jdk1.8后javadoc的严格校验 -->
<configuration>
<additionalparam>-Xdoclint:none</additionalparam>
</configuration>
</execution>
</executions>
</plugin>
<!-- 打包源码插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<!--签名插件-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<version>1.5</version>
<executions>
<execution>
<id>sign-artifacts</id>
<phase>verify</phase>
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
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
# 6.执行上传命令(自动签名)
在项目根目录打开cmd窗口,git bash
也可以哦。
输入以下命令签名并上传jar包
mvn clean deploy -P release
会让你输入一次密码,输入你生成秘钥时使用的password。

等待上传成功,会有Success提示。

排坑
比如出现time out,证明你上传超时了,网络不好。
根本原因就是华夏有时候会断片,可谓历经千辛万苦,速度又慢,你可以尝试科学上网解决,这是硬性问题。
如果提示什么401失败什么的,请务必检查你的配置是否正确。
不要怀疑,就是你的配置错了。
# 7.登录OSS仓库查看是否通过
访问:https://oss.sonatype.org
使用你第一步注册的用户名和密码登录。
有时候打不开,有时候502,有时候加载特别慢,不要怀疑,请科学上网。
加载成功后点击如下图的按钮

一般第6步上传成功后,你会在右侧列表最下面找到你的项目。
会以你的groupId来进行命名。

# 8.Close项目,预发布
点击Close后,我们可以查看Activity的状态。

一般出现这样的提示表示成功了。过1分钟左右就可以在仓库中搜索到我们的包。

右侧可以直接看到依赖的文本。

这一步可以进行一些测试,比如说我们在配置了setting.xml的servers节点的项目中,可以直接依赖,然后测试通过好在进行发布操作。
排坑
这一步很多童鞋都会出现一大堆问题。
比如说签名错误。
# 签名错误解决方案
签名错误有很多种情况会出现。
1) 你的gpg在安装后生成了多次秘钥,导致你现在也不知道是用的哪个秘钥签名了。
这种情况比较麻烦。解决方法如下:
gpg --list-keys
查看当前秘钥,发现有多个。
先清空你所有的私钥
gpg --delete-secret-key 你的秘钥
按两次y确认删除
然后在清空你所有的公钥
gpg --delete-key 你的秘钥
清空后在从第4步开始走
2) 你的秘钥上传到公共服务器,但是Maven中央仓库查找不到你的公钥。
这种情况在你的仓库会有提示,在哪个地址上找不到你的公钥,一般这个地址带了端口号。
解决方法如下:
你可以记下仓库上说找不到你的公钥的地址,注意连端口号一并记下。
然后在用这个地址上传你的秘钥,可能会上传失败,请科学上网。ping通在上传。
gpg --keyserver 你记下的地址 --send-keys 你生成的秘钥
验证是否上传成功
gpg --keyserver 你记下的地址 --recv-keys 你生成的秘钥
然后在从上传一次jar包,签名就验证成功了。
# 9.Release 发布项目

在确认无误时,点击Release即可发布项目。
发布项目后一般10分钟左右就可以在Maven中央仓库搜索到。
https://search.maven.org/
阿里仓库一般是1天左右同步
https://maven.aliyun.com/mvn/search/
Maven镜像仓库一般3天左右同步
https://mvnrepository.com/
注意:发布版本后,你无法删除自己发布的包,所以发布之前一定要慎重,慎重,再慎重!
# Author
本文出自 浅梦笔记 转载请注明出处,一字一句都是手工输入,请尊重一下劳动成果,谢谢。