You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Maven无法部署至GitHub Packages的问题求助

部署Maven包到GitHub Packages时随机出现443无响应或400错误的排查方案

问题描述

我按照GitHub官方指南创建了一个极简仓库,尝试部署Maven包到GitHub Packages,但持续随机出现以下两种错误之一:

  • Failed to deploy artifacts: Could not transfer artifact com.sadriu:packaging:pom:1.0.0 from/to github (https://maven.pkg.github.com/sadrian/packaging): maven.pkg.github.com:443 failed to respond
  • Failed to deploy artifacts: Could not transfer artifact com.sadriu:packaging:pom:1.0.0 from/to github (https://maven.pkg.github.com/sadrian/packaging): status code: 400, reason phrase: Bad Request (400)

有趣的是,部署SNAPSHOTS版本一切正常。我已经尝试过:

  • 更换不同Java版本(8和11)
  • 更换不同maven-deploy-plugin版本

本地测试时,我已在.m2/settings.xml中配置PAT,并且直接用PUT方法上传POM或JAR文件是成功的:

curl -X PUT 
"https://maven.pkg.github.com/sadrian/packaging/com/sadriu/packaging/1.0.0/packaging-1.0.0.jar" 
-H "Authorization: token ***" 
--upload-file "<<PATH_TO_JAR>>" -vvv
curl -X PUT 
"https://maven.pkg.github.com/sadrian/packaging/com/sadriu/packaging/1.0.0/packaging-1.0.0.pom" 
-H "Authorization: token ***" 
--upload-file "<<PATH_TO_POM>>" -vvv

响应内容如下:

...
* We are completely uploaded and fine
< HTTP/2 200 
< access-control-allow-methods: OPTIONS, PUT
< access-control-allow-origin: *
< content-security-policy: default-src 'none';
< server: GitHub Registry
< strict-transport-security: max-age=31536000;
< x-content-type-options: nosniff
< x-frame-options: DENY
< x-xss-protection: 1; mode=block
< date: Fri, 03 Mar 2023 12:59:48 GMT
< content-length: 66
< content-type: text/plain; charset=utf-8
< x-github-request-id: CE82:12C8F:16396B:171471:6401EF43
< 
Successfully registered maven upload: packaging-1.0.0.pom (1.0.0)
* Connection #0 to host maven.pkg.github.com left intact

排查方向与解决方案

  1. 强制Maven串行上传构件
    Maven deploy插件默认可能并行上传多个构件(如pom、jar、sources等),而GitHub Packages对并发请求的处理存在限制,容易引发随机超时或400错误。可在pom.xml中配置插件禁用并行:
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-deploy-plugin</artifactId>
    <version>3.1.0</version>
    <configuration>
        <parallel>false</parallel>
    </configuration>
</plugin>
  1. 确认PAT权限范围
    虽然curl上传成功,但Maven部署涉及元数据更新等额外操作,需确保PAT拥有write:packages和repo权限(私有仓库必须配置repo权限)。

  2. 添加Maven HTTP重试与超时配置
    443无响应多由网络波动导致,可在settings.xml中增加全局重试和超时参数:

<settings>
    <servers>
        <server>
            <id>github</id>
            <username>你的GitHub用户名</username>
            <password>你的PAT</password>
        </server>
    </servers>
    <properties>
        <maven.wagon.http.retryHandler.count>3</maven.wagon.http.retryHandler.count>
        <maven.wagon.http.connectionTimeout>30000</maven.wagon.http.connectionTimeout>
        <maven.wagon.http.socketTimeout>30000</maven.wagon.http.socketTimeout>
    </properties>
</settings>
  1. 检查版本号唯一性
    400错误可能是目标版本已存在于GitHub Packages中(正式版本默认不允许覆盖),可尝试使用全新版本号测试,或清理仓库中残留的失效版本记录。

  2. 清理本地缓存后重新部署
    本地仓库的缓存构件可能引发异常,执行以下命令强制清理并重新部署:

mvn clean deploy -U

内容的提问来源于stack exchange,提问作者sadrian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 22:12:30