【问题标题】:ClassNotFoundException - when building the image & push it to GCR using jib-maven-plugin in BitBucket pipelineClassNotFoundException - 在构建图像并将其推送到 GCR 时使用 BitBucket 管道中的 jib-maven-plugin
【发布时间】: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

我在做什么:

  1. 我有一个使用 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

  2. 之后,使用来自 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


【解决方案1】:

问题现已排序。

根本原因:

  • '找不到可编译的资源' - 我在构建日志中找到了这条消息。此消息提醒我在应用程序包中出现问题。
  • 我的系统在 Windows 10 上运行,我的应用程序目录以“Java.com.demo.sdas”(大写的 J)开头。由于 Windows 区分大小写;它不会引起问题。
  • BitBucket 管道在 Linux 服务器上运行,区分大小写。因此无法找到以“Java.com.demo.sdas”开头的应用程序目录。

解决方案:将目录重命名为“java”,然后一切正常。

【讨论】:

    猜你喜欢
    • 2020-07-06
    • 1970-01-01
    • 2020-04-11
    • 1970-01-01
    • 2011-07-15
    • 1970-01-01
    • 2020-08-31
    • 2019-03-18
    • 1970-01-01
    相关资源
    最近更新 更多