【发布时间】:2021-11-20 16:41:04
【问题描述】:
我的 GCP Cloud Run 服务出现以下错误:
Error: Could not find or load main class com.sdas.demo.sd.Application
Caused by: java.lang.ClassNotFoundException: com.sdas.demo.sd.Application
我在做什么:
-
我有一个使用 jib-maven-plugin 的 spring boot 应用程序。在 BitBucket 管道中,我正在执行以下命令:
mvn clean compile com.google.cloud.tools:jib-maven-plugin:3.1.4:build -Dimage=eu.gcr.io/sdas-demo-dev/temp-service
-
之后,使用来自 BitBucket 管道的 gcloud 命令将此 GCR 映像部署到 Cloud Run。此部署失败,出现“无法加载主类”错误。
但是,如果我从我的计算机 git bash 运行 mvn clean compile com.google.cloud.tools:jib-maven-plugin:3.1.4:build -Dimage=eu.gcr.io/sdas-demo-dev/temp-service 以获得相同的 Spring Boot 应用程序代码,然后将其部署到 Cloud Run(通过 gcloud 命令或通过控制台或通过管道);已成功部署。
我在 pom.xml 中的 jib-maven-plugin 下使用了“mainClass”标签。但还是无法找到或加载主类。
任何人都可以帮助如何识别问题吗?这是类路径问题还是环境问题?
【问题讨论】:
-
我觉得我遗漏了一些信息。您能否详细说明如何重现无法部署的方法和有效的方法?
-
经过一番调查,我发现 jib-maven-plugin 从 BitBucket 管道运行时无法编译源代码。这意味着,目标/类目录缺少我的应用程序的所有类。因此,当 jib 制作图像时,它会丢失类。但有趣的是,当我从本地 git bash 运行 mvn clean compile jib:build 时,它能够编译所有类并且图像工作正常。我怀疑 bitbucket 图像缺少 jvm。
-
小修正:是
maven-compiler-plugin编译源文件并在target/classes下创建.class文件,而不是jib-maven-plugin。
标签: google-cloud-platform google-cloud-run bitbucket-pipelines maven-jib