# 发布Jar到Maven中央仓库(详细流程)

# 前言

当我们在编写出比较好用的一些工具时,往往我们想让其他开发者方便快捷的使用。

现阶段最为流行的是以Maven管理我们项目中的Jar包,而发布到Maven中央仓库有着各种各样的坑,网上有一大堆教程,相对而言我在看的时候也综合了很多篇文章所总结出可行的方案。避免各位大大踩坑浪费时间。

需要用到的网站

https://issues.sonatype.org/login.jsp

https://oss.sonatype.org

# 流程

  1. 注册sonatype账号
  2. 申请工单
  3. 通过审核
  4. 下载gpg签名插件
  5. 编辑Maven配置文件
  6. 执行上传命令(自动签名)
  7. 登录OSS仓库查看是否通过
  8. Close项目,预发布
  9. 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
1

生成密钥时将需要输入name、email以及password。

必须要使用你第一步注册的用户名进行签名

password在之后的步骤需要用到,请记下来。

通过 gpg –-list-keys 可以查看你生成的秘钥。

上传秘钥到公共服务器

这样Maven仓库才可以通过公钥来验证jar包是否完整。

上传命令

gpg --keyserver hkp://pool.sks-keyservers.net --send-keys 你生成的秘钥
1

或者

gpg --send-keys 你生成的秘钥 --keyserver hkp://pool.sks-keyservers.net
1

验证是否上传成功命令

gpg --keyserver hkp://pool.sks-keyservers.net --recv-keys 你生成的秘钥
1

或者

gpg --recv-keys 你生成的秘钥 --keyserver hkp://pool.sks-keyservers.net
1

# 5.编辑Maven配置文件

# Step.1

首先我们找到我们安装的Maven的路径,找到setting.xml,找不到的上网搜一下文件在哪里。

配置servers节点

<servers>
    <server>
        <id>ossrh</id>
        <username>username</username>
        <password>password</password>
    </server>
</servers>
1
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>
1
2
3
4
5
6

配置oss-parent,这样好处就是可以省略很多配置。

<parent>
    <groupId>org.sonatype.oss</groupId>
    <artifactId>oss-parent</artifactId>
    <version>8</version>
</parent>
1
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>
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

在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>
1
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>
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

# 6.执行上传命令(自动签名)

在项目根目录打开cmd窗口,git bash 也可以哦。

输入以下命令签名并上传jar包

mvn clean deploy -P release
1

会让你输入一次密码,输入你生成秘钥时使用的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 你的秘钥
1

按两次y确认删除

然后在清空你所有的公钥

gpg --delete-key 你的秘钥
1

清空后在从第4步开始走

2) 你的秘钥上传到公共服务器,但是Maven中央仓库查找不到你的公钥。

这种情况在你的仓库会有提示,在哪个地址上找不到你的公钥,一般这个地址带了端口号。

解决方法如下:

你可以记下仓库上说找不到你的公钥的地址,注意连端口号一并记下。

然后在用这个地址上传你的秘钥,可能会上传失败,请科学上网。ping通在上传。

gpg --keyserver 你记下的地址 --send-keys 你生成的秘钥
1

验证是否上传成功

gpg --keyserver 你记下的地址 --recv-keys 你生成的秘钥
1

然后在从上传一次jar包,签名就验证成功了。

# 9.Release 发布项目

在确认无误时,点击Release即可发布项目。

发布项目后一般10分钟左右就可以在Maven中央仓库搜索到。

https://search.maven.org/

阿里仓库一般是1天左右同步

https://maven.aliyun.com/mvn/search/

Maven镜像仓库一般3天左右同步

https://mvnrepository.com/

注意:发布版本后,你无法删除自己发布的包,所以发布之前一定要慎重,慎重,再慎重!

# Author

本文出自 浅梦笔记 转载请注明出处,一字一句都是手工输入,请尊重一下劳动成果,谢谢。

最近更新: 2019/10/17 上午4:20:42