I want to compile a small project using Gradle and Quarkus 0.19.1 which "io.quarkus:quarkus-smallrye-opentracing". I do not use any annotation of the MicroProfile Tracing spec, I just include the dependency to get the automatic behavior.
Upon running ./gradlew clean build I receive the stack trace included at the end (using --stacktrace) with the innermost exception being:
Caused by: java.lang.NoSuchMethodException: javax.enterprise.inject.spi.ObserverMethod.isAsync()
at io.quarkus.smallrye.opentracing.deployment.SmallRyeOpenTracingProcessor.registerMethod(SmallRyeOpenTracingProcessor.java:29)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at io.quarkus.deployment.ExtensionLoader$1.execute(ExtensionLoader.java:508)
... 7 more
Expected behavior is that my tiny sample project compiles.
Actual behavior is outlined above. Please note that it works with the exact same version and using maven instead of gradle.
Steps to reproduce (which work for me):
Include in build.gradle
`implementation enforcedPlatform('io.quarkus:quarkus-bom:0.19.1')
implementation 'io.quarkus:quarkus-smallrye-opentracing'
and run ./gradlew clean compile.
I am happy to provide my (scrubbed) code sample if the bug is hard to reproduce.
Java version used is below. Please note that using Hotspot did not improve the situation.
openjdk version "11.0.3" 2019-04-16
OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.3+7)
Eclipse OpenJ9 VM AdoptOpenJDK (build openj9-0.14.0, JRE 11 Mac OS X amd64-64-Bit Compressed References 20190418_204 (JIT enabled, AOT enabled)
OpenJ9 - bad1d4d06
OMR - 4a4278e6
JCL - 5cc996a803 based on jdk-11.0.3+7)
Stacktrace for the error above
...
What went wrong:
Execution failed for task ':quarkusBuild'.
Failed to build a runnable JAR
...
Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':quarkusBuild'.
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$3.accept(ExecuteActionsTaskExecuter.java:148)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$3.accept(ExecuteActionsTaskExecuter.java:145)
at org.gradle.internal.Try$Failure.ifSuccessfulOrElse(Try.java:191)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:138)
at org.gradle.api.internal.tasks.execution.ResolveBeforeExecutionStateTaskExecuter.execute(ResolveBeforeExecutionStateTaskExecuter.java:75)
at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:62)
at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:108)
at org.gradle.api.internal.tasks.execution.ResolveBeforeExecutionOutputsTaskExecuter.execute(ResolveBeforeExecutionOutputsTaskExecuter.java:67)
at org.gradle.api.internal.tasks.execution.ResolveAfterPreviousExecutionStateTaskExecuter.execute(ResolveAfterPreviousExecutionStateTaskExecuter.java:46)
at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:94)
at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46)
at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:95)
at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)
at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:56)
at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:73)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:49)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:416)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:406)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:102)
at org.gradle.internal.operations.DelegatingBuildOperationExecutor.call(DelegatingBuildOperationExecutor.java:36)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:49)
at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:43)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:355)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:343)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:336)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:322)
at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker$1.execute(DefaultPlanExecutor.java:134)
at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker$1.execute(DefaultPlanExecutor.java:129)
at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:202)
at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.executeNextNode(DefaultPlanExecutor.java:193)
at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:129)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
Caused by: org.gradle.api.GradleException: Failed to build a runnable JAR
at io.quarkus.gradle.tasks.QuarkusBuild.buildQuarkus(QuarkusBuild.java:183)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:103)
at org.gradle.api.internal.project.taskfactory.StandardTaskAction.doExecute(StandardTaskAction.java:48)
at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:41)
at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:28)
at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:702)
at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:669)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$5.run(ExecuteActionsTaskExecuter.java:401)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:402)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:394)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:92)
at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:390)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:373)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.access$200(ExecuteActionsTaskExecuter.java:79)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$TaskExecution.execute(ExecuteActionsTaskExecuter.java:210)
at org.gradle.internal.execution.steps.ExecuteStep.lambda$execute$1(ExecuteStep.java:33)
at org.gradle.internal.execution.steps.ExecuteStep$$Lambda$170.0000000019D8A620.get(Unknown Source)
at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:33)
at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:26)
at org.gradle.internal.execution.steps.CleanupOutputsStep.execute(CleanupOutputsStep.java:58)
at org.gradle.internal.execution.steps.CleanupOutputsStep.execute(CleanupOutputsStep.java:35)
at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:48)
at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:33)
at org.gradle.internal.execution.steps.CancelExecutionStep.execute(CancelExecutionStep.java:39)
at org.gradle.internal.execution.steps.TimeoutStep.executeWithoutTimeout(TimeoutStep.java:73)
at org.gradle.internal.execution.steps.TimeoutStep.execute(TimeoutStep.java:54)
at org.gradle.internal.execution.steps.CatchExceptionStep.execute(CatchExceptionStep.java:35)
at org.gradle.internal.execution.steps.CreateOutputsStep.execute(CreateOutputsStep.java:51)
at org.gradle.internal.execution.steps.SnapshotOutputsStep.execute(SnapshotOutputsStep.java:45)
at org.gradle.internal.execution.steps.SnapshotOutputsStep.execute(SnapshotOutputsStep.java:31)
at org.gradle.internal.execution.steps.CacheStep.executeWithoutCache(CacheStep.java:201)
at org.gradle.internal.execution.steps.CacheStep.execute(CacheStep.java:70)
at org.gradle.internal.execution.steps.CacheStep.execute(CacheStep.java:45)
at org.gradle.internal.execution.steps.BroadcastChangingOutputsStep.execute(BroadcastChangingOutputsStep.java:49)
at org.gradle.internal.execution.steps.StoreSnapshotsStep.execute(StoreSnapshotsStep.java:43)
at org.gradle.internal.execution.steps.StoreSnapshotsStep.execute(StoreSnapshotsStep.java:32)
at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:38)
at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:24)
at org.gradle.internal.execution.steps.SkipUpToDateStep.executeBecause(SkipUpToDateStep.java:96)
at org.gradle.internal.execution.steps.SkipUpToDateStep.lambda$execute$0(SkipUpToDateStep.java:89)
at org.gradle.internal.execution.steps.SkipUpToDateStep$$Lambda$166.0000000019D80020.apply(Unknown Source)
at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:54)
at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:38)
at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:77)
at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:37)
at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:36)
at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:26)
at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:90)
at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:48)
at org.gradle.internal.execution.impl.DefaultWorkExecutor.execute(DefaultWorkExecutor.java:33)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:117)
... 35 more
Caused by: io.quarkus.creator.AppCreatorException: Failed to build a runner jar
at io.quarkus.creator.phase.runnerjar.RunnerJarPhase.provideOutcome(RunnerJarPhase.java:213)
at io.quarkus.creator.phase.runnerjar.RunnerJarPhase.provideOutcome(RunnerJarPhase.java:59)
at io.quarkus.creator.outcome.OutcomeResolver.resolve(OutcomeResolver.java:31)
at io.quarkus.creator.AppCreator.resolveOutcome(AppCreator.java:239)
at io.quarkus.gradle.tasks.QuarkusBuild.buildQuarkus(QuarkusBuild.java:180)
... 92 more
Caused by: io.quarkus.creator.AppCreatorException: Failed to augment application classes
at io.quarkus.creator.phase.augment.AugmentPhase.doProcess(AugmentPhase.java:421)
at io.quarkus.creator.phase.augment.AugmentPhase.provideOutcome(AugmentPhase.java:246)
at io.quarkus.creator.phase.augment.AugmentPhase.provideOutcome(AugmentPhase.java:72)
at io.quarkus.creator.outcome.OutcomeResolver.resolve(OutcomeResolver.java:31)
at io.quarkus.creator.AppCreator.resolveOutcome(AppCreator.java:239)
at io.quarkus.creator.phase.runnerjar.RunnerJarPhase.provideOutcome(RunnerJarPhase.java:211)
... 96 more
Caused by: io.quarkus.builder.BuildException: Build failure: Build failed due to errors
[error]: Build step io.quarkus.smallrye.opentracing.deployment.SmallRyeOpenTracingProcessor#registerMethod threw an exception: java.lang.IllegalStateException: java.lang.NoSuchMethodException: javax.enterprise.inject.spi.ObserverMethod.isAsync()
at io.quarkus.builder.Execution.run(Execution.java:108)
at io.quarkus.builder.BuildExecutionBuilder.execute(BuildExecutionBuilder.java:121)
at io.quarkus.deployment.QuarkusAugmentor.run(QuarkusAugmentor.java:118)
at io.quarkus.creator.phase.augment.AugmentPhase.doProcess(AugmentPhase.java:341)
... 101 more
Caused by: java.lang.IllegalStateException: java.lang.NoSuchMethodException: javax.enterprise.inject.spi.ObserverMethod.isAsync()
at io.quarkus.deployment.ExtensionLoader$1.execute(ExtensionLoader.java:517)
at io.quarkus.builder.BuildContext.run(BuildContext.java:398)
at io.quarkus.builder.Execution$$Lambda$442.000000001858E270.run(Unknown Source)
at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:2011)
at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1538)
at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1395)
at org.jboss.threads.JBossThread.run(JBossThread.java:479)
Caused by: java.lang.NoSuchMethodException: javax.enterprise.inject.spi.ObserverMethod.isAsync()
at io.quarkus.smallrye.opentracing.deployment.SmallRyeOpenTracingProcessor.registerMethod(SmallRyeOpenTracingProcessor.java:29)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at io.quarkus.deployment.ExtensionLoader$1.execute(ExtensionLoader.java:508)
... 7 more
Any chance you could provide a reproducer?
Sure, will do. Give me one or two days, need to fit working on it between family time.
Also, do you by any chance see different behavior with Maven?
ObserverMethod.isAsync() is a CDI 2 method which didn't exist in CDI 1. I had a quick look into Quarkus and found no obvious reason that would explain why CDI 1 is present in your project's dependency tree.
I also just noticed that the quarkus-quickstarts examples use an outdated version of Gradle with a bugged enforcedPlatform feature (fixed in Gradle 5.5). Assuming you're using the same version, this shouldn't affect your project unless you're using a Quarkus version built from master. But since it seems you observed a different behavior between Maven and Gradle, I'll still ask the question. Would you be any chance be using a Gradle version lower than 5.5?
I will submit a PR shortly in quarkus-quickstarts (and in quarkus-gradle-plugin to keep versions consistent) to upgrade the Gradle version in all our examples.
Sorry, I just saw that you already mentioned things work in Maven.
I wouldn't be surprised if @gwenned's suggestion works.
BOM support in Gradle has caused us problems in the last
I retested again and used Gradle 5.5.1 this time. The results are the same — Gradle fails and Maven works with no difference my listed dependencies as far as I can tell.
✔ $ ./gradlew --version
Build time: 2019-07-10 20:38:12 UTC
Revision: 3245f748c7061472da4dc184991919810f7935a5
Kotlin: 1.3.31
Groovy: 2.5.4
Ant: Apache Ant(TM) version 1.9.14 compiled on March 12 2019
JVM: 11.0.3 (Eclipse OpenJ9 openj9-0.14.0)
OS: Mac OS X 10.14.5 amd64
I put a sample together which should reproduce the issue upon running ./gradlew clean build in this repository: https://github.com/julicjung/quarkus-gradle
Thanks for the reproducer @julicjung!
I just ran a ./gradlew dependencies from it and there's actually a trace of CDI 1 in the dependency graph:
| | | +--- io.quarkus:quarkus-core:0.19.1
[...]
| | | | +--- io.smallrye:smallrye-config:1.3.5
[...]
| | | | | +--- javax.enterprise:cdi-api:1.2 -> 2.0.SP1 (*)
I'll investigate this further in a couple of hours but I'm confident this will be fixed by upgrading the Quarkus smallrye-config dependency to 1.3.6 (they moved from CDI 1 to CDI 2 in that version).
That does not explain the difference in behaviour between Gradle and Maven (maybe another Gradle bug?) but it should be enough to solve your problem.
If you like I can pull up a maven reproducer, but it is essentially the same codebase and I would just use maven with more or less the default maven configuration from the guide at quarkus.io.
I just confirmed upgrading smallrye-config to 1.3.6 is fixing your issue, but I'd still like to understand why this is only happening with Gradle and not Maven...
As you will see in this PR from my Quarkus fork, this isn't just a question of upgrading the dependency version.
@dmlloyd, @kenfinnigan: WDYT about this CDI issue? Is it OK to upgrade smallrye-config to 1.3.6 like I did? I'm pretty sure this is not a good idea without upgrading the other SmallRye dependencies as well.
I just created two PRs to upgrade the Gradle version to 5.5.1:
This issue wasn't mentionned in the PRs since they're not fixing the problem.
@gwenneg I think @dmlloyd is in the process of putting together a PR for updating SmallRye Config, as we need to figure out some SmallRye artifact/version changes first
Just did a retest with quarks v.0.21.1 out of curiosity — as far as I can tell the issue is still open, so I assume the Smallrye version changes might be outstanding.
@dmlloyd This was fixed with #3629, right?
Hm, still I get the same issue, looks like the problem appears in the plugin code, but the mentioned fix does not affect the quarkus plugin dependencies.
I was able to work around it by forcing the buildscript dependency resolution to always pick javax.enterprise:cdi-api:2.0.SP1, i.e.:
buildscript {
getConfigurations().classpath {
resolutionStrategy.eachDependency { DependencyResolveDetails details ->
if (details.requested.group == 'javax.enterprise' && details.requested.name == "cdi-api") {
println "Updating version for: $details.requested.group:$details.requested.name:$details.requested.version -->2.0.SP1"
details.useVersion '2.0.SP1'
}
}
}
}
As far as I can tell this is fixed in in v0.23.1. When I bump the version numbers in my reproducer (linked in an earlier comment) it builds flawlessly.
I can confirm that this issue disappeared after upgrading to v0.23.1.
Thanks a lot!
I am going to close this since we have reports it has been fixed and I also couldn't reproduce it with the latest version of Quarkus
Most helpful comment
@gwenneg I think @dmlloyd is in the process of putting together a PR for updating SmallRye Config, as we need to figure out some SmallRye artifact/version changes first