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

BitBucket流水线jib-maven-plugin推GCR后Cloud Run报ClassNotFoundException

排查步骤与根因判断

报错说明

你遇到的报错是JVM启动时无法找到指定的主类:

Error: Could not find or load main class com.sdas.demo.sd.Application
Caused by: java.lang.ClassNotFoundException: com.sdas.demo.sd.Application

由于本地构建的镜像可正常部署到Cloud Run,仅BitBucket流水线构建的镜像报错,可排除主类配置本身的逻辑问题,根因为流水线构建环境和本地环境的差异。


分步排查方案

1. 检查流水线构建基础环境差异

分别在本地和BitBucket流水线中执行以下命令,对比输出结果:

# 检查JDK和Maven版本
java -version
mvn -v
# 检查代码拉取是否完整,主类文件是否存在
ls -la src/main/java/com/sdas/demo/sd/Application.java
# 检查Maven激活的profile
mvn help:active-profiles

重点确认流水线是否存在JDK版本不兼容、代码拉取不全、额外profile激活导致主类被排除的问题。

2. 对比不同环境构建出的镜像内容

分别对本地和流水线构建的镜像执行以下命令,检查主类文件是否存在:

docker run --rm --entrypoint=ls eu.gcr.io/sdas-demo-dev/temp-service /app/classpath/com/sdas/demo/sd/
  • 如果流水线构建的镜像中不存在Application.class:说明是流水线的编译阶段问题,主类没有被编译打包到镜像中
  • 如果存在Application.class:说明是jib的主类配置在流水线环境未生效

3. 强制指定主类参数验证

直接在流水线的jib构建命令中显式传入主类参数,避免jib未读取到pom配置的问题,修改后的命令如下:

mvn clean compile com.google.cloud.tools:jib-maven-plugin:3.1.4:build -Dimage=eu.gcr.io/sdas-demo-dev/temp-service -Djib.mainClass=com.sdas.demo.sd.Application

如果修改命令后部署正常,说明是流水线环境下jib插件未正确读取pom中的mainClass配置,可固定用命令行传参的方式解决。


根因归类

该问题不属于代码层面的类路径配置问题,属于构建环境差异问题,所有排查方向均围绕本地和BitBucket流水线的环境、构建过程差异展开即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 10:36:03