抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

发布 jar 到中央仓库一直是一个相对繁琐且复杂的流程,特别是涉及到gpg密钥,以及之前不健全的 oss.sonatype.com 账号体系管理,网络上的各种教程也是复杂繁琐,并且经过几次迭代,sonatype以及于6月30日停用了旧的发布方式,完全使用 central.sonatype.com 来管理和发布,所以大部分网上的教程都已经过时

并且当你以前可以发布,但是最近突然不行了,报错401/403等等的错误,别怀疑,是之前的发布方式被废弃了,替换为新方式即可

一、事前准备

需要拥有gpg密钥,gpg如何申请不在本文篇章中,这个网络太多了且相对简单,只安装gpg,创建密钥串,将公钥发布到公网上,保存好自己的私钥和密码即可

二、注册 central.sonatype.com 账号

之前使用过 oss.sonatype.com 的,一般使用原账号密码可以直接登录 central.sonatype.com ,新用户直接注册即可,有任何登录问题,都可发送邮箱 central-support@sonatype.com 请求帮助,官方答复还是很快的。

三、创建 Namespace

登录之后,访问 https://central.sonatype.com/publishing/namespaces ,若旧账户应该能看到自己原来的命名空间,即对应jar包的groupId,一般为域名倒置,例如 com.seepine,也可以右上角创建新的命名空间,按照步骤验证即可。

四、生成UserToken

访问 https://central.sonatype.com/account ,第一个选项即 Generate User Token,点击右边的按钮,会生成对应token,类似如下

1
2
3
4
5
<server>
<id>central</id>
<username>JN**xm</username>
<password>Mgmod*************************xhios</password>
</server>

五、修改 pom.xml

官方教程地址为 https://central.sonatype.org/publish/publish-portal-maven/ 有兴趣或不理解的也可以查看官方文档,会繁琐一点但更加详细

将原来一堆的插件替换为如下,重点关注倒数那两个插件,其他都是次要,可能会与你原来项目的不同

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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
<project>

<properties>
<java.version>1.8</java.version>
<encoding>UTF-8</encoding>
<maven.compiler.source>${java.version}</maven.compiler.source>
<maven.compiler.target>${java.version}</maven.compiler.target>
<project.build.sourceEncoding>${encoding}</project.build.sourceEncoding>
<project.reporting.outputEncoding>${encoding}</project.reporting.outputEncoding>
</properties>

<dependencies>
<!-- 依赖 -->
</dependencies>

<build>

<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.11.0</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<encoding>${encoding}</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.2.1</version>
<inherited>false</inherited>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.3.0</version>
<inherited>false</inherited>
<configuration>
<nohelp>true</nohelp>
<charset>${encoding}</charset>
<encoding>${encoding}</encoding>
<docencoding>${encoding}</docencoding>
</configuration>
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>

<!-- !!!重点插件一,gpg 相关插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<version>1.6</version>
<inherited>false</inherited>
<executions>
<execution>
<id>sign-artifacts</id>
<phase>verify</phase>
<goals>
<goal>sign</goal>
</goals>
<configuration>
<gpgArguments>
<arg>--pinentry-mode</arg>
<arg>loopback</arg>
</gpgArguments>
</configuration>
</execution>
</executions>
</plugin>
<!-- !!!重点插件二,新的发布插件 -->
<plugin>
<groupId>org.sonatype.central</groupId>
<artifactId>central-publishing-maven-plugin</artifactId>
<version>0.8.0</version>
<extensions>true</extensions>
<configuration>
<publishingServerId>central</publishingServerId>
<autoPublish>true</autoPublish>
</configuration>
</plugin>

</plugins>
</build>

</project>

六、创建 github actions

根目录创建 .github/workflows/deploy.yml 文件,内容如下,若 jdk 版本不同请酌情修改

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
name: Maven Central Repo Deployment
on:
release:
types: [ released ]
jobs:
publish-central:
runs-on: ubuntu-latest
steps:

- name: Checkout Git Repo
uses: actions/checkout@v4

- name: Set up Apache Maven Central
uses: actions/setup-java@v4
with:
distribution: 'zulu'
java-version: '8' # 一般只需要修改这里,8 17 21 等等
server-id: central
server-username: SERVER_USERNAME
server-password: SERVER_PASSWORD
gpg-private-key: ${{ secrets.GPG_SECRET }}
gpg-passphrase: GPG_PASSPHRASE

- name: Publish to Apache Maven Central
run: mvn deploy
env:
SERVER_USERNAME: ${{ secrets.SERVER_USERNAME }}
SERVER_PASSWORD: ${{ secrets.SERVER_PASSWORD }}
GPG_PASSPHRASE: ${{ secrets.GPG_PASSWORD }}

七、创建密钥

分别创建四个密钥,创建的入口以及创建后结果如图所示

  • SERVER_USERNAME:生成的userToken中的username
  • SERVER_PASSWORD:生成的userToken中的password
  • GPG_SECRET:gpg 的私钥,—–BEGIN PGP PRIVATE KEY BLOCK—–开头那一大串
  • GPG_PASSWORD:创建 gpg 密钥串时的密码

deploy-secret.png

八、发布 jar 包

将修改后代码和 github actions yml文件这两个改动推送到 github 仓库

发布一个新版本(https://github.com///releases)

即可在 Actions 中查看到一个任务在执行,若任务执行错误,也可点击查看具体错误信息,当然按部就班的做,一般都会是成功

deploy-actions.png

九、查看发布情况

https://central.sonatype.com/publishing/deployments 中,也可查看到一条状态为 PUBLISHING 的发布记录,看到则表示 central 已成功接收到了你的发布请求,待十来分钟当状态变为 PUBLISHED,则表示你的 jar 包已经被同步到中央,此时其他人可引入你的依赖了

deploy-deployments.png

评论