Search code examples
google-cloud-platformgoogle-cloud-runbitbucket-pipelinesmaven-jib

ClassNotFoundException - when building the image & push it to GCR using jib-maven-plugin in BitBucket pipeline


I am getting the below error in my GCP Cloud Run service:

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

What I was doing:

  1. I have a spring boot application where I used jib-maven-plugin. In BitBucket pipeline, I was executing the below command:

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

  2. After that deploying this GCR image to Cloud Run using gcloud command from BitBucket pipeline. This deployment failed with the error that 'Could not load main class'.

But if I run the mvn clean compile com.google.cloud.tools:jib-maven-plugin:3.1.4:build -Dimage=eu.gcr.io/sdas-demo-dev/temp-service from my computer git bash for the same spring boot application code and then deploy it to Cloud Run (via gcloud command or via console or via pipeline); it's deployed successfully.

I used 'mainClass' tag under jib-maven-plugin in pom.xml. But still it is unable to find or load the main class.

Can anyone help how to identify the problem? Is this a classpath issue or environment issue?


Solution

  • Issue sorted now.

    Root cause:

    • 'No resources found to compile' - I found this message in the build log. This message remind me something wrong within the application package.
    • My system is running on Windows 10 and my application directory starting with 'Java.com.demo.sdas' (J in capital). Since Windows is case in sensitive; it is not causing an issue.
    • BitBucket pipeline running on Linux server and it is case sensitive. Thus it is unable to find the application directory starting with 'Java.com.demo.sdas'.

    Solution: Renamed the directory as 'java' and then everything is working as expected.