Geoffrey De Smet
Geoffrey De Smet

Reputation: 27337

LinkageError in OptaPlanner Quarkus build after adding optaplanner-test dependency

After adding the optaplanner-test dependency on the quarkus optaplanner timetabling quickstart, this appears:

2020-06-19 13:19:33,653 ERROR [io.qua.dep.dev.DevModeMain] (vert.x-worker-thread-1) Failed to start quarkus: java.lang.RuntimeException: io.quarkus.builder.BuildException: Build failure: Build failed due to errors
        [error]: Build step org.optaplanner.quarkus.deployment.OptaPlannerProcessor#recordSolverFactory threw an exception: java.lang.LinkageError: loader constraint violation: loader io.quarkus.bootstrap.classloading.QuarkusClassLoader @64dc86c6 wants to load class org.optaplanner.core.config.solver.SolverConfig. A different class with the same name was previously loaded by io.quarkus.bootstrap.classloading.QuarkusClassLoader @7af327e3. (org.optaplanner.core.config.solver.SolverConfig is in unnamed module of loader io.quarkus.bootstrap.classloading.QuarkusClassLoader @7af327e3, parent loader 'platform')
        at io.quarkus.deployment.recording.BytecodeRecorderImpl$$RecordingProxyProxy41.solverConfigSupplier(BytecodeRecorderImpl$$RecordingProxyProxy41.zig:98)
        at org.optaplanner.quarkus.deployment.OptaPlannerProcessor.recordSolverFactory(OptaPlannerProcessor.java:144)
        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 java.base/java.lang.reflect.Method.invoke(Method.java:566)
        at io.quarkus.deployment.ExtensionLoader$2.execute(ExtensionLoader.java:932)
        at io.quarkus.builder.BuildContext.run(BuildContext.java:277)
        at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
        at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:2046)
        at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1578)
        at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1452)
        at java.base/java.lang.Thread.run(Thread.java:834)
        at org.jboss.threads.JBossThread.run(JBossThread.java:479)

        at io.quarkus.runner.bootstrap.AugmentActionImpl.runAugment(AugmentActionImpl.java:247)
        at io.quarkus.runner.bootstrap.AugmentActionImpl.reloadExistingApplication(AugmentActionImpl.java:142)
        at io.quarkus.runner.bootstrap.AugmentActionImpl.reloadExistingApplication(AugmentActionImpl.java:52)
        at io.quarkus.deployment.dev.IsolatedDevModeMain.restartApp(IsolatedDevModeMain.java:139)
        at io.quarkus.deployment.dev.RuntimeUpdatesProcessor.doScan(RuntimeUpdatesProcessor.java:139)
        at io.quarkus.vertx.http.runtime.devmode.VertxHttpHotReplacementSetup$1.handle(VertxHttpHotReplacementSetup.java:50)
        at io.quarkus.vertx.http.runtime.devmode.VertxHttpHotReplacementSetup$1.handle(VertxHttpHotReplacementSetup.java:42)
        at io.vertx.core.impl.ContextImpl.lambda$executeBlocking$2(ContextImpl.java:316)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
        at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
        at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: io.quarkus.builder.BuildException: Build failure: Build failed due to errors
        [error]: Build step org.optaplanner.quarkus.deployment.OptaPlannerProcessor#recordSolverFactory threw an exception: java.lang.LinkageError: loader constraint violation: loader io.quarkus.bootstrap.classloading.QuarkusClassLoader @64dc86c6 wants to load class org.optaplanner.core.config.solver.SolverConfig. A different class with the same name was previously loaded by io.quarkus.bootstrap.classloading.QuarkusClassLoader @7af327e3. (org.optaplanner.core.config.solver.SolverConfig is in unnamed module of loader io.quarkus.bootstrap.classloading.QuarkusClassLoader @7af327e3, parent loader 'platform')
        at io.quarkus.deployment.recording.BytecodeRecorderImpl$$RecordingProxyProxy41.solverConfigSupplier(BytecodeRecorderImpl$$RecordingProxyProxy41.zig:98)
        at org.optaplanner.quarkus.deployment.OptaPlannerProcessor.recordSolverFactory(OptaPlannerProcessor.java:144)
        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 java.base/java.lang.reflect.Method.invoke(Method.java:566)
        at io.quarkus.deployment.ExtensionLoader$2.execute(ExtensionLoader.java:932)
        at io.quarkus.builder.BuildContext.run(BuildContext.java:277)
        at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
        at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:2046)
        at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1578)
        at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1452)
        at java.base/java.lang.Thread.run(Thread.java:834)
        at org.jboss.threads.JBossThread.run(JBossThread.java:479)

        at io.quarkus.builder.Execution.run(Execution.java:115)
        at io.quarkus.builder.BuildExecutionBuilder.execute(BuildExecutionBuilder.java:79)
        at io.quarkus.deployment.QuarkusAugmentor.run(QuarkusAugmentor.java:149)
        at io.quarkus.runner.bootstrap.AugmentActionImpl.runAugment(AugmentActionImpl.java:245)
        ... 11 more
Caused by: java.lang.LinkageError: loader constraint violation: loader io.quarkus.bootstrap.classloading.QuarkusClassLoader @64dc86c6 wants to load class org.optaplanner.core.config.solver.SolverConfig. A different class with the same name was previously loaded by io.quarkus.bootstrap.classloading.QuarkusClassLoader @7af327e3. (org.optaplanner.core.config.solver.SolverConfig is in unnamed module of loader io.quarkus.bootstrap.classloading.QuarkusClassLoader @7af327e3, parent loader 'platform')
        at io.quarkus.deployment.recording.BytecodeRecorderImpl$$RecordingProxyProxy41.solverConfigSupplier(BytecodeRecorderImpl$$RecordingProxyProxy41.zig:98)
        at org.optaplanner.quarkus.deployment.OptaPlannerProcessor.recordSolverFactory(OptaPlannerProcessor.java:144)
        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 java.base/java.lang.reflect.Method.invoke(Method.java:566)
        at io.quarkus.deployment.ExtensionLoader$2.execute(ExtensionLoader.java:932)
        at io.quarkus.builder.BuildContext.run(BuildContext.java:277)
        at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
        at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:2046)
        at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1578)
        at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1452)
        at java.base/java.lang.Thread.run(Thread.java:834)
        at org.jboss.threads.JBossThread.run(JBossThread.java:479)

Upvotes: 1

Views: 845

Answers (1)

Geoffrey De Smet
Geoffrey De Smet

Reputation: 27337

This is caused by an out of sync of the quarkus versions. The maven quarkus plugin was using quarkus 1.4.x and the optaplanner-quarkus modules were using quarkus 1.5.x.

The quarkus-universe-bom might avoid such issues going forward.

Upvotes: 2

Related Questions