无法通过GitLab-CI将Shaded Jar上传至Nexus求助
排查GitLab CI部署Shaded Jar到Nexus失败的问题
从你提供的错误日志和配置来看,Connection reset by peer (Write failed)这个错误通常是传输过程中TCP连接被意外断开导致的,结合场景我整理了几个常见排查方向和解决方案:
1. 先排查网络与Nexus端的限制
这个错误最常见的原因是网络不稳定或者Nexus有上传限制:
- 测试GitLab Runner与Nexus的连通性:在CI流水线里加一步测试,比如
curl -v https://nexus.myplayplanet.net/repository/myplayplanet-snapshots/,确认runner能正常访问仓库地址,没有被防火墙、代理拦截; - 检查Nexus的上传大小限制:登录Nexus管理后台,找到
myplayplanet-snapshots仓库,查看「Storage」配置里的「Maximum Component Size」,如果shaded jar体积较大(比如超过默认的100MB),需要调大这个值; - 调整Maven传输超时:在你的CI使用的
settings.xml里,给Nexus的server配置增加超时参数,避免因传输慢导致断开:<servers> <server> <id>pp-snapshots</id> <username>your-nexus-username</username> <password>your-nexus-password</password> <configuration> <httpConfiguration> <all> <connectionTimeout>300000</connectionTimeout> <!-- 5分钟 --> <readTimeout>300000</readTimeout> </all> </httpConfiguration> </configuration> </server> </servers>
2. 检查Maven Shade与Deploy插件的配合
你的shade插件配置里shadedArtifactAttached=true,会生成一个带shaded classifier的jar包,部署时需要确保这个附件被正确处理:
- 确认Nexus快照仓库允许带classifier的构件:默认快照仓库是支持的,但如果有自定义规则可能限制,检查仓库的「Repository Policies」是否为
Snapshot,且没有额外的构件过滤规则; - 显式配置Deploy插件包含shaded构件:如果默认deploy行为没有带上shaded jar,可以在pom里配置deploy插件,明确指定要部署的附件:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-deploy-plugin</artifactId> <version>2.8.2</version> <!-- 建议升级到较新版本 --> <configuration> <attach>true</attach> <skip>false</skip> </configuration> </plugin>
3. 处理大体积Shaded Jar的传输问题
Shaded jar通常会包含依赖,体积可能很大,容易触发传输中断:
- 增加Maven运行内存:在CI的Maven命令前设置
MAVEN_OPTS="-Xmx2G -XX:MaxMetaspaceSize=512M",避免因内存不足导致进程异常; - 开启Maven的断点续传支持:可以使用wagon-http-lightweight插件,在pom里配置:
<build> <extensions> <extension> <groupId>org.apache.maven.wagon</groupId> <artifactId>wagon-http-lightweight</artifactId> <version>3.5.3</version> </extension> </extensions> </build>
4. 开启详细日志定位问题
如果以上方法都没解决,建议在CI的Maven命令里加上-X参数,比如mvn deploy -X,这样会输出详细的调试日志,你可以看到:
- 认证是否成功通过Nexus的校验;
- 传输构件时的具体字节数和进度,判断是在哪个阶段断开的;
- 是否有其他隐藏的异常(比如权限不足、仓库路径不存在等)
内容的提问来源于stack exchange,提问作者Nitwel
相关产品推荐
相关产品推荐

