quarkusio / quarkus

Quarkus: Supersonic Subatomic Java.
https://quarkus.io
Apache License 2.0
13.72k stars 2.67k forks source link

Quarkus 3.4.1 fails to start in dev mode #36077

Closed wjglerum closed 1 year ago

wjglerum commented 1 year ago

Describe the bug

After upgrading from 3.3.2 to 3.4.1 Quarkus dev mode failed with the following exception:

2023-09-21 20:23:05,104 ERROR [io.qua.run.boo.StartupActionImpl] (Quarkus Main Thread) Error running Quarkus: java.lang.reflect.InvocationTargetException
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:568)
    at io.quarkus.runner.bootstrap.StartupActionImpl$1.run(StartupActionImpl.java:113)
    at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: java.lang.ExceptionInInitializerError
    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:499)
    at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)
    at io.quarkus.runtime.Quarkus.run(Quarkus.java:70)
    at io.quarkus.runtime.Quarkus.run(Quarkus.java:44)
    at io.quarkus.runtime.Quarkus.run(Quarkus.java:124)
    at io.quarkus.runner.GeneratedMain.main(Unknown Source)
    ... 6 more
Caused by: java.lang.RuntimeException: Failed to start quarkus
    at io.quarkus.runner.ApplicationImpl.<clinit>(Unknown Source)
    ... 15 more
Caused by: java.lang.NoClassDefFoundError: io/grpc/ClientInterceptor
    at java.base/java.lang.ClassLoader.defineClass1(Native Method)
    at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1012)
    at io.quarkus.bootstrap.classloading.QuarkusClassLoader.loadClass(QuarkusClassLoader.java:506)
    at io.quarkus.bootstrap.classloading.QuarkusClassLoader.loadClass(QuarkusClassLoader.java:466)
    at java.base/java.lang.ClassLoader.defineClass1(Native Method)
    at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1012)
    at io.quarkus.bootstrap.classloading.QuarkusClassLoader.loadClass(QuarkusClassLoader.java:506)
    at io.quarkus.bootstrap.classloading.QuarkusClassLoader.loadClass(QuarkusClassLoader.java:466)
    at io.quarkus.bootstrap.classloading.QuarkusClassLoader.loadClass(QuarkusClassLoader.java:516)
    at io.quarkus.bootstrap.classloading.QuarkusClassLoader.loadClass(QuarkusClassLoader.java:466)
    at java.base/java.lang.Class.forName0(Native Method)
    at java.base/java.lang.Class.forName(Class.java:467)
    at io.quarkus.micrometer.runtime.binder.grpc.GrpcMetricsClientInterceptor_Bean.<init>(Unknown Source)
    at io.quarkus.arc.setup.Default_ComponentsProvider.addBeans8(Unknown Source)
    at io.quarkus.arc.setup.Default_ComponentsProvider.getComponents(Unknown Source)
    at io.quarkus.arc.impl.ArcContainerImpl.<init>(ArcContainerImpl.java:125)
    at io.quarkus.arc.Arc.initialize(Arc.java:39)
    at io.quarkus.arc.runtime.ArcRecorder.initContainer(ArcRecorder.java:47)
    at io.quarkus.deployment.steps.ArcProcessor$generateResources844392269.deploy_0(Unknown Source)
    at io.quarkus.deployment.steps.ArcProcessor$generateResources844392269.deploy(Unknown Source)
    ... 16 more
Caused by: java.lang.ClassNotFoundException: io.grpc.ClientInterceptor
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
    at io.quarkus.bootstrap.classloading.QuarkusClassLoader.loadClass(QuarkusClassLoader.java:516)
    at io.quarkus.bootstrap.classloading.QuarkusClassLoader.loadClass(QuarkusClassLoader.java:466)
    ... 36 more

Expected behavior

No exception when starting Quarkus dev mode

Actual behavior

An exception is thrown and dev mode fails to start

How to Reproduce?

Upgrade to Quarkus 3.4.1

We have the following extension enabled on our web app (so quite hard to narrow down right now):

Installed features: [agroal, cache, camel-core, camel-direct, camel-file, camel-log, camel-quartz, cdi, config-yaml, flyway, hibernate-envers, hibernate-orm, hibernate-orm-panache, hibernate-validator, jdbc-mssql, micrometer, narayana-jta, oidc, quartz, qute, rest-client-reactive, rest-client-reactive-jaxb, rest-client-reactive-jsonb, resteasy-reactive, resteasy-reactive-jsonb, resteasy-reactive-qute, scheduler, security, smallrye-context-propagation, smallrye-health, smallrye-openapi, swagger-ui, vertx, webjars-locator]

Output of uname -a or ver

Darwin Willem's-MacBook-Pro 22.6.0 Darwin Kernel Version 22.6.0: Wed Jul  5 22:21:56 PDT 2023; root:xnu-8796.141.3~6/RELEASE_X86_64 x86_64

Output of java -version

openjdk version "17.0.3" 2022-04-19
OpenJDK Runtime Environment Temurin-17.0.3+7 (build 17.0.3+7)
OpenJDK 64-Bit Server VM Temurin-17.0.3+7 (build 17.0.3+7, mixed mode, sharing)

GraalVM version (if different from Java)

No response

Quarkus version or git rev

3.4.1

Build tool (ie. output of mvnw --version or gradlew --version)

Apache Maven 3.8.6 (84538c9988a25aec085021c365c560670ad80f63) Maven home: /Users/wjglerum/.m2/wrapper/dists/apache-maven-3.8.6-bin/1ks0nkde5v1pk9vtc31i9d0lcd/apache-maven-3.8.6 Java version: 17.0.3, vendor: Eclipse Adoptium, runtime: /Library/Java/JavaVirtualMachines/temurin-17.jdk/Contents/Home Default locale: en_NL, platform encoding: UTF-8 OS name: "mac os x", version: "13.5.2", arch: "x86_64", family: "mac"

Additional information

Quarkus dev mode does start without exceptions once I add the GRPC extension:

<dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-grpc</artifactId>
</dependency>
geoand commented 1 year ago

Any chance you can attach a sample application that behaves as you described?

Thanks

wjglerum commented 1 year ago

Any chance you can attach a sample application that behaves as you described?

Thanks

Nope, haven't had the time to do that (yet), I'll try to create a minimal reproducer some time this week.

geoand commented 1 year ago

🙏🏼

baggiobaggio commented 1 year ago

I ran into this issue myself, here is a sample project created on code.quarkus.io, to reproduce run ./gradlew quarkusDev:

issue-36077-reproducer.zip

wjglerum commented 1 year ago

I ran into this issue myself, here is a sample project created on code.quarkus.io, to reproduce run ./gradlew quarkusDev:

issue-36077-reproducer.zip

thanks @baggiobaggio! this made it a lot easier for me to narrow down. The offending combination seems to be micrometer+jib, see this minimal reproducer micrometer-jib.zip and simply run quarkus dev

Add the grpc extension with quarkus extension add grpc and now it works again in dev mode

wjglerum commented 1 year ago

Looks like it was already fixed! https://github.com/quarkusio/quarkus/pull/36039

geoand commented 1 year ago

Nice!