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

Maven上传60MB SpringBoot Jar至Artifactory失败求助

解决多模块SpringBoot应用部署Artifactory时大文件上传后检查失败的问题

问题场景

多模块SpringBoot应用部署到Artifactory时,小体积子模块上传成功,但60MB的主应用模块上传时仅显示Uploading就报错,提示找不到对应Jar包。核心原因是Jenkins构建流程在大文件未完成上传/Artifactory索引时,就触发了文件存在性检查。

子模块成功日志:

[INFO] Uploading to snapshots: <jar path>
[INFO] Uploaded to snapshots: <jar path>  (241 kB at 759 kB/s)

主模块失败日志:

Uploading to snapshots: <jar>
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.8.2:deploy (default-deploy) on project <project>: Failed to deploy artifacts: Could not find artifact <application module jar> in snapshots (<artifactory path>) -> [Help 1]

修复方案

1. 升级maven-deploy-plugin版本

旧版本(如2.8.2)存在大文件上传的同步逻辑缺陷,升级到最新稳定版(如3.1.1)可优化上传确认流程,确保文件完全上传并被Artifactory索引后再执行后续步骤。修改项目根pom.xml的插件配置:

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-deploy-plugin</artifactId>
      <version>3.1.1</version>
    </plugin>
  </plugins>
</build>

2. 配置插件等待上传确认

如果无法升级插件,可在现有2.8.2版本的插件配置中添加等待参数,强制插件等待Artifactory返回上传完成的确认信号,避免提前触发检查:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-deploy-plugin</artifactId>
  <version>2.8.2</version>
  <configuration>
    <waitForDeployment>true</waitForDeployment>
    <deploymentWaitTimeout>300000</deploymentWaitTimeout> <!-- 5分钟超时,可按需调整 -->
  </configuration>
</plugin>

3. 拆分Jenkins构建流程

将上传与检查步骤分离,确保大文件完全上传后再执行存在性验证:

  • 第一步:执行mvn deploy -DskipTests完成所有模块上传,不触发即时检查
  • 第二步:编写Shell脚本循环检查主模块Jar的可用性,示例脚本:
ARTIFACT_URL="http://your-artifactory-url/snapshots/your/group/id/your-app/1.0-SNAPSHOT/your-app-1.0-SNAPSHOT.jar"
TIMEOUT=300  # 总超时时间(秒)
INTERVAL=5   # 检查间隔(秒)

elapsed=0
while [ $elapsed -lt $TIMEOUT ]; do
  if curl --output /dev/null --silent --head --fail "$ARTIFACT_URL"; then
    echo "主模块Jar已成功上传至Artifactory"
    exit 0
  fi
  echo "等待主模块Jar可用... 已等待${elapsed}秒,剩余$((TIMEOUT-elapsed))秒"
  sleep $INTERVAL
  elapsed=$((elapsed + INTERVAL))
done

echo "超时:主模块Jar在${TIMEOUT}秒内未完成上传/索引"
exit 1

4. 调整Artifactory仓库设置

在Artifactory后台配置对应快照仓库的异步上传确认,或在Jenkins的Artifactory插件部署配置中勾选Wait for Artifact Availability选项,并设置合理的等待时长(如30秒),确保文件完全写入并索引后再返回成功信号。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 13:48:25