Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

@UnlessBuildProperty does not work properly if io.quarkus:quarkus-rest in the dependencies. #40315

Closed
sszuev opened this issue Apr 26, 2024 · 7 comments · Fixed by #46576
Closed
Labels
Milestone

Comments

@sszuev
Copy link

sszuev commented Apr 26, 2024

Describe the bug

after updating to version >3.5.3 (e.g. 3.9.4), the application stopped working.
I have a demo project to reproduce issue: https://github.com/sszuev/play-quarkus
the application contains quarkus-kafka-streams & quarkus-rest.
It contains one class-producer:

import io.quarkus.arc.properties.UnlessBuildProperty
import jakarta.enterprise.context.ApplicationScoped
import jakarta.enterprise.inject.Produces
import org.apache.kafka.streams.StreamsBuilder
import org.apache.kafka.streams.Topology

@ApplicationScoped
@UnlessBuildProperty(name = "app.config.topics", stringValue = "", enableIfMissing = false)
class AppTopologyFactory {
    @Produces
    fun buildTopology(): Topology = StreamsBuilder().build()
}

application.properties:

app.config.topics=

gradle-dependencies:

dependencies {
    implementation enforcedPlatform("${quarkusPlatformGroupId}:${quarkusPlatformArtifactId}:${quarkusPlatformVersion}")
    implementation 'io.quarkus:quarkus-kotlin'
    implementation 'io.quarkus:quarkus-kafka-streams'
    implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8'
    implementation 'io.quarkus:quarkus-arc'
    implementation 'commons-codec:commons-codec'
    implementation 'io.quarkus:quarkus-rest'
}

Expected behavior

no errors is expected; the initialization of kafka-streams should be skipped with warning

Actual behavior

2024-04-26 17:34:58,629 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:1508)
	at io.quarkus.arc.processor.BeanDeployment.init(BeanDeployment.java:320)
	at io.quarkus.arc.processor.BeanProcessor.initialize(BeanProcessor.java:160)
	at io.quarkus.arc.deployment.ArcProcessor.validate(ArcProcessor.java:488)
	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.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:833)
	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:638)
	at io.quarkus.arc.processor.BeanDeployment.init(BeanDeployment.java:308)
	... 14 more

	at io.quarkus.runner.bootstrap.AugmentActionImpl.runAugment(AugmentActionImpl.java:334)
	at io.quarkus.runner.bootstrap.AugmentActionImpl.createInitialRuntimeApplication(AugmentActionImpl.java:251)
	at io.quarkus.runner.bootstrap.AugmentActionImpl.createInitialRuntimeApplication(AugmentActionImpl.java:60)
	at io.quarkus.deployment.dev.IsolatedDevModeMain.firstStart(IsolatedDevModeMain.java:112)
	at io.quarkus.deployment.dev.IsolatedDevModeMain.accept(IsolatedDevModeMain.java:433)
	at io.quarkus.deployment.dev.IsolatedDevModeMain.accept(IsolatedDevModeMain.java:55)
	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:1508)
	at io.quarkus.arc.processor.BeanDeployment.init(BeanDeployment.java:320)
	at io.quarkus.arc.processor.BeanProcessor.initialize(BeanProcessor.java:160)
	at io.quarkus.arc.deployment.ArcProcessor.validate(ArcProcessor.java:488)
	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.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:833)
	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:638)
	at io.quarkus.arc.processor.BeanDeployment.init(BeanDeployment.java:308)
	... 14 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:330)
	... 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:1508)
	at io.quarkus.arc.processor.BeanDeployment.init(BeanDeployment.java:320)
	at io.quarkus.arc.processor.BeanProcessor.initialize(BeanProcessor.java:160)
	at io.quarkus.arc.deployment.ArcProcessor.validate(ArcProcessor.java:488)
	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.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:833)
	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:638)
	at io.quarkus.arc.processor.BeanDeployment.init(BeanDeployment.java:308)
	... 14 more

How to Reproduce?

  1. git clone https://github.com/sszuev/play-quarkus
  2. gradlew quarkusDev

Output of uname -a or ver

windows11,x64

Output of java -version

17.0.6

Quarkus version or git rev

3.9.4

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

8.6

Additional information

the application works fine if there is no io.quarkus:quarkus-rest in the dependencies

is there any workaround? this bug blocks updating the business application to the latest version

@sszuev sszuev added the kind/bug Something isn't working label Apr 26, 2024
@quarkus-bot quarkus-bot bot added area/kotlin env/windows Impacts Windows machines labels Apr 26, 2024
Copy link

quarkus-bot bot commented Apr 26, 2024

/cc @geoand (kotlin)

@geoand
Copy link
Contributor

geoand commented Apr 29, 2024

Thanks for reporting.

Is there any chance you narrowed down which version actually introduced the breakage?

@sszuev
Copy link
Author

sszuev commented Apr 29, 2024

Thanks for reporting.

Is there any chance you narrowed down which version actually introduced the breakage?

3.6.0.CR1 - FAIL; (3.5.3 - OK)

@geoand
Copy link
Contributor

geoand commented Apr 29, 2024

Thanks!

@mkouba
Copy link
Contributor

mkouba commented Sep 17, 2024

The build only fails with UnsatisfiedResolutionException in the dev mode because Topology is a dependency of a Dev UI bean - io.quarkus.kafka.streams.runtime.devui.KafkaStreamsJsonRPCService - that was introduced in 3.6.0.CR1.

Now I have no idea how the Dev UI for kafka streams is supposed to work if you don't provide a Topology bean 🤷.

@mkouba
Copy link
Contributor

mkouba commented Sep 17, 2024

CC @dcotfr @gunnarmorling

@dcotfr
Copy link
Contributor

dcotfr commented Feb 28, 2025

See Fix-46576 for a fix proposal

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging a pull request may close this issue.

5 participants