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

无法通过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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:09:40