使用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
排查方向与解决方案
- 强制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>
确认PAT权限范围
虽然curl上传成功,但Maven部署涉及元数据更新等额外操作,需确保PAT拥有write:packages和repo权限(私有仓库必须配置repo权限)。添加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>
检查版本号唯一性
400错误可能是目标版本已存在于GitHub Packages中(正式版本默认不允许覆盖),可尝试使用全新版本号测试,或清理仓库中残留的失效版本记录。清理本地缓存后重新部署
本地仓库的缓存构件可能引发异常,执行以下命令强制清理并重新部署:
mvn clean deploy -U
内容的提问来源于stack exchange,提问作者sadrian
相关产品推荐
相关产品推荐

