Skip to content

Spring Cloud Function on GCP not compatible with Spring Boot 4.x #1336

Description

@btrajkovski-mms

Describe the bug
After upgrading to Spring Boot 4.0.3 and also spring-cloud-function-adapter-gcp to version 5.0.1. Deployment to GCP no longer works. I tried both gen1 and gen2 options in GCP.

Issue seems to be pretty much the same as #1320 but that one is closed already. And I am also providing a minimum reproducible example here.

I am getting following exception during startup of the function:

Exception in thread "main" java.lang.RuntimeException: Could not construct an instance of org.springframework.cloud.function.adapter.gcp.GcfJarLauncher: java.lang.reflect.InvocationTargetException
	at com.google.cloud.functions.invoker.BackgroundFunctionExecutor.forClass(BackgroundFunctionExecutor.java:134)
	at com.google.cloud.functions.invoker.BackgroundFunctionExecutor.forClass(BackgroundFunctionExecutor.java:124)
	at com.google.cloud.functions.invoker.runner.Invoker.startServer(Invoker.java:319)
	at com.google.cloud.functions.invoker.runner.Invoker.startServer(Invoker.java:241)
	at com.google.cloud.functions.invoker.runner.Invoker.main(Invoker.java:124)
Caused by: java.lang.reflect.InvocationTargetException
	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500)
	at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:481)
	at com.google.cloud.functions.invoker.BackgroundFunctionExecutor.forClass(BackgroundFunctionExecutor.java:131)
	... 4 more
Caused by: java.lang.ExceptionInInitializerError
	at org.springframework.boot.loader.net.protocol.jar.Handler.openConnection(Handler.java:46)
	at java.base/java.net.URL.openConnection(URL.java:1094)
	at org.springframework.boot.loader.net.protocol.jar.JarUrlClassLoader.getJarFile(JarUrlClassLoader.java:183)
	at org.springframework.boot.loader.net.protocol.jar.JarUrlClassLoader.definePackage(JarUrlClassLoader.java:146)
	at org.springframework.boot.loader.net.protocol.jar.JarUrlClassLoader.definePackageIfNecessary(JarUrlClassLoader.java:129)
	at org.springframework.boot.loader.net.protocol.jar.JarUrlClassLoader.loadClass(JarUrlClassLoader.java:102)
	at org.springframework.boot.loader.launch.LaunchedClassLoader.loadClass(LaunchedClassLoader.java:91)
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525)
	at org.springframework.cloud.function.adapter.gcp.GcfJarLauncher.<init>(GcfJarLauncher.java:46)
	... 10 more
Caused by: java.lang.IllegalStateException: java.net.MalformedURLException: unknown protocol: nested
	at org.springframework.boot.loader.net.protocol.jar.JarUrlConnection.<clinit>(JarUrlConnection.java:67)
	... 19 more
Caused by: java.net.MalformedURLException: unknown protocol: nested
	at java.base/java.net.URL.<init>(URL.java:681)
	at java.base/java.net.URL.<init>(URL.java:569)
	at java.base/java.net.URL.<init>(URL.java:516)
	at java.base/java.net.JarURLConnection.parseSpecs(JarURLConnection.java:175)
	at java.base/java.net.JarURLConnection.<init>(JarURLConnection.java:158)
	at org.springframework.boot.loader.net.protocol.jar.JarUrlConnection.<init>(JarUrlConnection.java:92)
	at org.springframework.boot.loader.net.protocol.jar.JarUrlConnection.<clinit>(JarUrlConnection.java:64)
	... 19 more

Sample
Providing the Spring Boot cloud functions with deployment script to GCP (check deploy.sh)

example-project.zip

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions