Skip to content

Application fails to start in dev mode if kafka-streams extension is present #41432

@fedinskiy

Description

@fedinskiy

Describe the bug

I have an application, which contains kafka-streams dependency. When I start the application in a dev mode, it fails with UnsatisfiedResolutionException in Quarkus code.

Expected behavior

Application shouldn't fail, or should tell user, that must be fixed in the application/configs/environment.

Actual behavior

2024-06-25 16:01:33,700 ERROR [io.qua.dep.dev.IsolatedDevModeMain] (main) Failed to start quarkus: java.lang.RuntimeException: io.quarkus.builder.BuildException: Build failure: Build failed due to errors
	[error]: Build step io.quarkus.arc.deployment.ArcProcessor#validate threw an exception: jakarta.enterprise.inject.spi.DeploymentException: jakarta.enterprise.inject.UnsatisfiedResolutionException: Unsatisfied dependency for type org.apache.kafka.streams.Topology and qualifiers [@Default]
	- injection target: io.quarkus.kafka.streams.runtime.devui.KafkaStreamsJsonRPCService#topology
	- declared on CLASS bean [types=[java.lang.Object, io.quarkus.kafka.streams.runtime.devui.KafkaStreamsJsonRPCService], qualifiers=[@Default, @Any], target=io.quarkus.kafka.streams.runtime.devui.KafkaStreamsJsonRPCService]
	at io.quarkus.arc.processor.BeanDeployment.processErrors(BeanDeployment.java:1529)
	at io.quarkus.arc.processor.BeanDeployment.init(BeanDeployment.java:332)
	at io.quarkus.arc.processor.BeanProcessor.initialize(BeanProcessor.java:166)
	at io.quarkus.arc.deployment.ArcProcessor.validate(ArcProcessor.java:488)
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
	at java.base/java.lang.reflect.Method.invoke(Method.java:580)
	at io.quarkus.deployment.ExtensionLoader$3.execute(ExtensionLoader.java:849)
	at io.quarkus.builder.BuildContext.run(BuildContext.java:256)
	at org.jboss.threads.ContextHandler$1.runWith(ContextHandler.java:18)
	at org.jboss.threads.EnhancedQueueExecutor$Task.doRunWith(EnhancedQueueExecutor.java:2516)
	at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2495)
	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1521)
	at java.base/java.lang.Thread.run(Thread.java:1583)
	at org.jboss.threads.JBossThread.run(JBossThread.java:483)
Caused by: jakarta.enterprise.inject.UnsatisfiedResolutionException: Unsatisfied dependency for type org.apache.kafka.streams.Topology and qualifiers [@Default]
	- injection target: io.quarkus.kafka.streams.runtime.devui.KafkaStreamsJsonRPCService#topology
	- declared on CLASS bean [types=[java.lang.Object, io.quarkus.kafka.streams.runtime.devui.KafkaStreamsJsonRPCService], qualifiers=[@Default, @Any], target=io.quarkus.kafka.streams.runtime.devui.KafkaStreamsJsonRPCService]
	at io.quarkus.arc.processor.Beans.resolveInjectionPoint(Beans.java:519)
	at io.quarkus.arc.processor.BeanInfo.init(BeanInfo.java:642)
	at io.quarkus.arc.processor.BeanDeployment.init(BeanDeployment.java:317)
	... 12 more

	at io.quarkus.runner.bootstrap.AugmentActionImpl.runAugment(AugmentActionImpl.java:331)
	at io.quarkus.runner.bootstrap.AugmentActionImpl.createInitialRuntimeApplication(AugmentActionImpl.java:252)
	at io.quarkus.runner.bootstrap.AugmentActionImpl.createInitialRuntimeApplication(AugmentActionImpl.java:58)
	at io.quarkus.deployment.dev.IsolatedDevModeMain.firstStart(IsolatedDevModeMain.java:113)
	at io.quarkus.deployment.dev.IsolatedDevModeMain.accept(IsolatedDevModeMain.java:435)
	at io.quarkus.deployment.dev.IsolatedDevModeMain.accept(IsolatedDevModeMain.java:56)
	at io.quarkus.bootstrap.app.CuratedApplication.runInCl(CuratedApplication.java:138)
	at io.quarkus.bootstrap.app.CuratedApplication.runInAugmentClassLoader(CuratedApplication.java:93)
	at io.quarkus.deployment.dev.DevModeMain.start(DevModeMain.java:131)
	at io.quarkus.deployment.dev.DevModeMain.main(DevModeMain.java:62)
Caused by: io.quarkus.builder.BuildException: Build failure: Build failed due to errors
	[error]: Build step io.quarkus.arc.deployment.ArcProcessor#validate threw an exception: jakarta.enterprise.inject.spi.DeploymentException: jakarta.enterprise.inject.UnsatisfiedResolutionException: Unsatisfied dependency for type org.apache.kafka.streams.Topology and qualifiers [@Default]
	- injection target: io.quarkus.kafka.streams.runtime.devui.KafkaStreamsJsonRPCService#topology
	- declared on CLASS bean [types=[java.lang.Object, io.quarkus.kafka.streams.runtime.devui.KafkaStreamsJsonRPCService], qualifiers=[@Default, @Any], target=io.quarkus.kafka.streams.runtime.devui.KafkaStreamsJsonRPCService]
	at io.quarkus.arc.processor.BeanDeployment.processErrors(BeanDeployment.java:1529)
	at io.quarkus.arc.processor.BeanDeployment.init(BeanDeployment.java:332)
	at io.quarkus.arc.processor.BeanProcessor.initialize(BeanProcessor.java:166)
	at io.quarkus.arc.deployment.ArcProcessor.validate(ArcProcessor.java:488)
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
	at java.base/java.lang.reflect.Method.invoke(Method.java:580)
	at io.quarkus.deployment.ExtensionLoader$3.execute(ExtensionLoader.java:849)
	at io.quarkus.builder.BuildContext.run(BuildContext.java:256)
	at org.jboss.threads.ContextHandler$1.runWith(ContextHandler.java:18)
	at org.jboss.threads.EnhancedQueueExecutor$Task.doRunWith(EnhancedQueueExecutor.java:2516)
	at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2495)
	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1521)
	at java.base/java.lang.Thread.run(Thread.java:1583)
	at org.jboss.threads.JBossThread.run(JBossThread.java:483)
Caused by: jakarta.enterprise.inject.UnsatisfiedResolutionException: Unsatisfied dependency for type org.apache.kafka.streams.Topology and qualifiers [@Default]
	- injection target: io.quarkus.kafka.streams.runtime.devui.KafkaStreamsJsonRPCService#topology
	- declared on CLASS bean [types=[java.lang.Object, io.quarkus.kafka.streams.runtime.devui.KafkaStreamsJsonRPCService], qualifiers=[@Default, @Any], target=io.quarkus.kafka.streams.runtime.devui.KafkaStreamsJsonRPCService]
	at io.quarkus.arc.processor.Beans.resolveInjectionPoint(Beans.java:519)
	at io.quarkus.arc.processor.BeanInfo.init(BeanInfo.java:642)
	at io.quarkus.arc.processor.BeanDeployment.init(BeanDeployment.java:317)
	... 12 more

	at io.quarkus.builder.Execution.run(Execution.java:123)
	at io.quarkus.builder.BuildExecutionBuilder.execute(BuildExecutionBuilder.java:79)
	at io.quarkus.deployment.QuarkusAugmentor.run(QuarkusAugmentor.java:160)
	at io.quarkus.runner.bootstrap.AugmentActionImpl.runAugment(AugmentActionImpl.java:327)
	... 9 more
Caused by: jakarta.enterprise.inject.spi.DeploymentException: jakarta.enterprise.inject.UnsatisfiedResolutionException: Unsatisfied dependency for type org.apache.kafka.streams.Topology and qualifiers [@Default]
	- injection target: io.quarkus.kafka.streams.runtime.devui.KafkaStreamsJsonRPCService#topology
	- declared on CLASS bean [types=[java.lang.Object, io.quarkus.kafka.streams.runtime.devui.KafkaStreamsJsonRPCService], qualifiers=[@Default, @Any], target=io.quarkus.kafka.streams.runtime.devui.KafkaStreamsJsonRPCService]
	at io.quarkus.arc.processor.BeanDeployment.processErrors(BeanDeployment.java:1529)
	at io.quarkus.arc.processor.BeanDeployment.init(BeanDeployment.java:332)
	at io.quarkus.arc.processor.BeanProcessor.initialize(BeanProcessor.java:166)
	at io.quarkus.arc.deployment.ArcProcessor.validate(ArcProcessor.java:488)
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
	at java.base/java.lang.reflect.Method.invoke(Method.java:580)
	at io.quarkus.deployment.ExtensionLoader$3.execute(ExtensionLoader.java:849)
	at io.quarkus.builder.BuildContext.run(BuildContext.java:256)
	at org.jboss.threads.ContextHandler$1.runWith(ContextHandler.java:18)
	at org.jboss.threads.EnhancedQueueExecutor$Task.doRunWith(EnhancedQueueExecutor.java:2516)
	at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2495)
	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1521)
	at java.base/java.lang.Thread.run(Thread.java:1583)
	at org.jboss.threads.JBossThread.run(JBossThread.java:483)
Caused by: jakarta.enterprise.inject.UnsatisfiedResolutionException: Unsatisfied dependency for type org.apache.kafka.streams.Topology and qualifiers [@Default]
	- injection target: io.quarkus.kafka.streams.runtime.devui.KafkaStreamsJsonRPCService#topology
	- declared on CLASS bean [types=[java.lang.Object, io.quarkus.kafka.streams.runtime.devui.KafkaStreamsJsonRPCService], qualifiers=[@Default, @Any], target=io.quarkus.kafka.streams.runtime.devui.KafkaStreamsJsonRPCService]
	at io.quarkus.arc.processor.Beans.resolveInjectionPoint(Beans.java:519)
	at io.quarkus.arc.processor.BeanInfo.init(BeanInfo.java:642)
	at io.quarkus.arc.processor.BeanDeployment.init(BeanDeployment.java:317)
	... 12 more

How to Reproduce?

  1. Create the app: wget -O app.zip 'https://code.quarkus.io/d?e=rest&e=kafka-streams&e=messaging-kafka&cn=code.quarkus.io'
  2. Unpack it: unzip -q app.zip && cd code-with-quarkus/
  3. mvn quarkus:dev

If the app is built and run in prod mode, it starts without any problem:
4. mvn clean install && java -jar target/quarkus-app/quarkus-run.jar
If the kafka-streams is removed, the app works in dev mode as well:
3. quarkus extension remove kafka-streams
4. mvn quarkus:dev

Output of uname -a or ver

6.7.3-200.fc39.x86_64

Output of java -version

Java version: 21.0.1, vendor: Eclipse Adoptium

Quarkus version or git rev

3.11.3

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

Apache Maven 3.9.6 (bc0240f3c744dd6b6ec2920b3cd08dcc295161ae)

Additional information

No response

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions