新建Sonatype账号
原来的 https://oss.sonatype.org/ 在等2026后无法登录,因此我原先账号和 命名空间(namespace) 也就是包名无法登录。
需要到新的中央仓库注册账号 https://central.sonatype.com/,并通过邮件联系管理员进行关联和激活,参考 [1]

最简单的注册方式就是直接使用Github登录,能省略很多事情

若你时已有的 sonatype 账号无法登录 ,则需要发送邮件让管理员帮助关联账号。
发送至邮箱:central-support@sonatype.com
邮件标题:add new account to already register namsepace
邮件内容如下:
I previously registered an account on issues.sonatype.org and had a verified namespace
{你的包名命名空间} , Now that issues.sonatype.org has been deprecated, I am unable to use my previous account for project push. Please add my new account to the {你的包名命名空间} namespace
account number: {你新注册的账号}
Namespace: {你的包名命名空间}
this is my github account:
{证明材料截图,比如你的Github项目管理主页}
等待邮件回复,回复后你登录主页,View Namespace 可以看到你的包名就可以了

获取Maven仓库Token
登录后需要创建token给自动化工具使用

给一个名字,设置不过期

然后复制他给你的 username 和 Token

pom.xml 设置
项目中修改 pom.xml
引入用于编译签名和打包的插件
xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- 项目名称必须 -->
<name>Project Name</name>
<dependencies>
<!-- 依赖 -->
</dependencies>
<build>
<plugins>
<!-- 源代码打包 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.3.0</version>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- Javadoc 文档打包 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.6.3</version>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
<configuration>
<doclint>none</doclint>
</configuration>
</plugin>
<!-- 代码GPG签名 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<version>3.1.0</version>
<executions>
<execution>
<id>sign-artifacts</id>
<phase>verify</phase>
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
<configuration>
<!-- 设置为非交互模式,否则Github Action无法输入GPG密钥进行签名 -->
<gpgArguments>
<arg>--pinentry-mode</arg>
<arg>loopback</arg>
</gpgArguments>
</configuration>
</plugin>
<!-- 可选:跳过单元测试 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.2.5</version>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
<!-- 代码编译 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.12.1</version>
<configuration>
<source>${maven.compiler.source}</source>
<target>${maven.compiler.target}</target>
<encoding>${project.build.sourceEncoding}</encoding>
</configuration>
</plugin>
<!-- Maven中央仓库推送 -->
<plugin>
<groupId>org.sonatype.central</groupId>
<artifactId>central-publishing-maven-plugin</artifactId>
<version>0.10.0</version>
<extensions>true</extensions>
<configuration>
<!-- publishingServerId 将在Github Action配置文件中用到 -->
<publishingServerId>central</publishingServerId>
<autoPublish>true</autoPublish>
</configuration>
</plugin>
</plugins>
</build>
</project>
有关于如何生成GPG密钥仓考 ref [2]
仓库配置
进入Github仓库 Setting > Secrets and variables > New repository secret

这里创建4个变量,如下:

-
OSSRH_USERNAME :获取Maven仓库Token 步骤中得到 username
-
OSSRH_TOKEN :获取Maven仓库Token 步骤中得到 password
-
GPG_PRIVATE_KEY:GPG导出的加密私钥
-
GPG_PASSPHRASE:用于解密私钥的密码,就是你创建密钥时候输入的那个密码
完成后这样就可以在自动化脚本中通过环境变量 ${``{ secrets.变量名 }}的方式使用这些认证信息.
自动化编译推送脚本
在项目根目录创建 .github/workflows/deploy.yml
yaml
# 自动化名称,会在Github Action中显示
name: Deploy to Maven Central
# 这里是在tag格式为 *.*.* 时触发下面job中的流程
on:
push:
tags:
- '*.*.*'
workflow_dispatch:
jobs:
deploy:
runs-on: ubuntu-latest
permissions:
contents: read
steps:
# 下载代码
- name: Checkout code
uses: actions/checkout@v5
# 设置编译环境和环境变量
- name: Set up Apache Maven Central
uses: actions/setup-java@v5
with:
# 设置Java的版本号 8 11 等
java-version: '8'
# 设置JDK的发行商,详见 https://github.com/actions/setup-java
# temurin - 表示Eclipse Temurin
distribution: 'temurin'
# 设置服务ID,这里就是pom中配置 publishingServerId 要保持一致
server-id: central
# 这里定义变量,注意不要修改 server-username、server-password的值
# 否则下个阶段会出现认证失败401等问题
server-username: SERVER_USERNAME
server-password: SERVER_PASSWORD
# GPG相关设置
gpg-private-key: ${{ secrets.GPG_PRIVATE_KEY }}
gpg-passphrase: GPG_PASSPHRASE
# 打包推送
- name: Publish to Apache Maven Central
run: mvn clean deploy -DskipTests --no-transfer-progress
env:
# 环境变量设置为前面步骤中在Github 项目Setting中设置secrets名称
SERVER_USERNAME: ${{ secrets.OSSRH_USERNAME }}
SERVER_PASSWORD: ${{ secrets.OSSRH_TOKEN }}
GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }}
完成后推送至Github中
触发自动化测试
回到Github项目首页,点击 Action 找到我们的步骤名称 Deploy to Maven Central ,展开 Run workflow 点击 Run workflow

这样自动化将会开始,可以点击 All workflow 就可以查看运行状态

若自动化失败则点击展开查看原因。
Maven中央仓库检查
登录 https://central.sonatype.com/

等待10分钟左右,Maven仓库将你的包Push到中央仓库可供下载
参考文献
1\]. [issues.sonatype.org网站废弃,Maven仓库账号被废弃问题解决 . csdn . Genius! . 2025.7 . https://blog.csdn.net/GeniusLS/article/details/139903315](https://blog.csdn.net/GeniusLS/article/details/139903315) \[2\]. [如何使用GitHub Action自动发布JAR到Maven仓库 . 程序猿DD_ . csdn . 2021.4 . https://blog.csdn.net/j3T9Z7H/article/details/115423174](https://blog.csdn.net/j3T9Z7H/article/details/115423174) \[3\]. [Github Actions 自动发布 jar 包到 Maven 中央仓库 . seepine . 2025.7 . https://seepine.com/dev/maven/deploy/](https://seepine.com/dev/maven/deploy/) \[4\]. [setup-java . github . 2026.1 . https://github.com/actions/setup-java](https://github.com/actions/setup-java)