Github自动打包推送Maven中央仓库

新建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)

相关推荐
indexsunny2 小时前
互联网大厂Java求职面试实战:Spring Boot微服务与Kafka消息队列解析
java·spring boot·微服务·面试·kafka·jpa
invicinble2 小时前
关于spring的全量认识
java·spring
齐 飞2 小时前
JDK8中stream中常用方法
java
小旭95272 小时前
【Java 基础】泛型<T>
java·开发语言·intellij-idea
她说..2 小时前
FIND_IN_SET()方法
xml·java·spring boot
花间相见2 小时前
【JAVA开发】—— Maven核心用法与实战指南
java·python·maven
爱吃的强哥2 小时前
Springboot 使用 SSE推送消息到客户端(Electron)
java·spring boot·electron
Elias不吃糖2 小时前
Java Stream 流(Stream API)详细讲解
java·stream·
寻星探路2 小时前
【全景指南】JavaEE 深度解析:从 Jakarta EE 演进、B/S 架构到 SSM 框架群实战
java·开发语言·人工智能·spring boot·ai·架构·java-ee