-
Bug
-
Resolution: Unresolved
-
Major
-
None
-
None
-
None
-
NEW
-
NEW
The error message is a very misleading: "IllegalArgumentException: The scoreDirectorFactory lacks a configuration for an easyScoreCalculatorClass or an incrementalScoreCalculatorClass."
It should be: "The constraintProviderClass (does.NotExist) does not exist.". It should fail-fast, before the multi score director check. It should fail fast when a non existing class is configured as a class.
To reproduce:
- Take the school-timetabling quarkus quickstart
- Create a file src/main/resources/solverConfig.xml with this content:
<?xml version="1.0" encoding="UTF-8"?> <solver xmlns="https://www.optaplanner.org/xsd/solver" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://www.optaplanner.org/xsd/solver https://www.optaplanner.org/xsd/solver/solver.xsd"> <scoreDirectorFactory> <constraintProviderClass>does.NotExist</constraintProviderClass> </scoreDirectorFactory> </solver>
Result:
2022-05-20 09:14:43,438 ERROR [io.qua.dep.dev.IsolatedDevModeMain] (main) Failed to start quarkus: java.lang.RuntimeException: java.lang.RuntimeException: Failed to start quarkus at io.quarkus.dev.appstate.ApplicationStateNotification.waitForApplicationStart(ApplicationStateNotification.java:51) at io.quarkus.runner.bootstrap.StartupActionImpl.runMainClass(StartupActionImpl.java:122) at io.quarkus.deployment.dev.IsolatedDevModeMain.firstStart(IsolatedDevModeMain.java:144) at io.quarkus.deployment.dev.IsolatedDevModeMain.accept(IsolatedDevModeMain.java:455) at io.quarkus.deployment.dev.IsolatedDevModeMain.accept(IsolatedDevModeMain.java:66) at io.quarkus.bootstrap.app.CuratedApplication.runInCl(CuratedApplication.java:140) at io.quarkus.bootstrap.app.CuratedApplication.runInAugmentClassLoader(CuratedApplication.java:96) at io.quarkus.deployment.dev.DevModeMain.start(DevModeMain.java:132) at io.quarkus.deployment.dev.DevModeMain.main(DevModeMain.java:62) Caused by: java.lang.RuntimeException: Failed to start quarkus at io.quarkus.runner.ApplicationImpl.doStart(Unknown Source) at io.quarkus.runtime.Application.start(Application.java:101) at io.quarkus.runtime.ApplicationLifecycleManager.run(ApplicationLifecycleManager.java:103) at io.quarkus.runtime.Quarkus.run(Quarkus.java:67) at io.quarkus.runtime.Quarkus.run(Quarkus.java:41) at io.quarkus.runtime.Quarkus.run(Quarkus.java:120) at io.quarkus.runner.GeneratedMain.main(Unknown Source) 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.runner.bootstrap.StartupActionImpl$1.run(StartupActionImpl.java:103) at java.base/java.lang.Thread.run(Thread.java:829) Caused by: java.lang.IllegalArgumentException: The scoreDirectorFactory lacks a configuration for an easyScoreCalculatorClass or an incrementalScoreCalculatorClass. at org.optaplanner.core.impl.score.director.ScoreDirectorFactoryFactory.decideMultipleScoreDirectorFactories(ScoreDirectorFactoryFactory.java:148) at org.optaplanner.core.impl.score.director.ScoreDirectorFactoryFactory.buildScoreDirectorFactory(ScoreDirectorFactoryFactory.java:55) at org.optaplanner.core.impl.solver.DefaultSolverFactory.buildScoreDirectorFactory(DefaultSolverFactory.java:177) at org.optaplanner.core.impl.solver.DefaultSolverFactory.<init>(DefaultSolverFactory.java:87) at org.optaplanner.core.api.solver.SolverFactory.create(SolverFactory.java:122) at org.optaplanner.quarkus.bean.DefaultOptaPlannerBeanProvider.solverFactory(DefaultOptaPlannerBeanProvider.java:50) at org.optaplanner.quarkus.bean.DefaultOptaPlannerBeanProvider_ProducerMethod_solverFactory_0b7f23015d253edbbe46501de32d0e76875e5fe6_Bean.create(Unknown Source) at org.optaplanner.quarkus.bean.DefaultOptaPlannerBeanProvider_ProducerMethod_solverFactory_0b7f23015d253edbbe46501de32d0e76875e5fe6_Bean.create(Unknown Source) at io.quarkus.arc.impl.AbstractSharedContext.createInstanceHandle(AbstractSharedContext.java:101) at io.quarkus.arc.impl.AbstractSharedContext$1.get(AbstractSharedContext.java:29) at io.quarkus.arc.impl.AbstractSharedContext$1.get(AbstractSharedContext.java:26) at io.quarkus.arc.impl.LazyValue.get(LazyValue.java:26) at io.quarkus.arc.impl.ComputingCache.computeIfAbsent(ComputingCache.java:69) at io.quarkus.arc.impl.AbstractSharedContext.get(AbstractSharedContext.java:26) at org.optaplanner.quarkus.bean.DefaultOptaPlannerBeanProvider_ProducerMethod_solverFactory_0b7f23015d253edbbe46501de32d0e76875e5fe6_Bean.get(Unknown Source) at org.optaplanner.quarkus.bean.DefaultOptaPlannerBeanProvider_ProducerMethod_solverFactory_0b7f23015d253edbbe46501de32d0e76875e5fe6_Bean.get(Unknown Source) at io.quarkus.arc.impl.ArcContainerImpl.beanInstanceHandle(ArcContainerImpl.java:428) at io.quarkus.arc.impl.ArcContainerImpl.beanInstanceHandle(ArcContainerImpl.java:441) at io.quarkus.arc.impl.ArcContainerImpl.instanceHandle(ArcContainerImpl.java:412) at io.quarkus.arc.impl.ArcContainerImpl.instance(ArcContainerImpl.java:229) at org.optaplanner.quarkus.devui.OptaPlannerDevUIPropertiesSupplier.getModelInfo(OptaPlannerDevUIPropertiesSupplier.java:82) at org.optaplanner.quarkus.devui.OptaPlannerDevUIPropertiesSupplier.get(OptaPlannerDevUIPropertiesSupplier.java:68) at org.optaplanner.quarkus.devui.OptaPlannerDevUIPropertiesSupplier.get(OptaPlannerDevUIPropertiesSupplier.java:41) at io.quarkus.vertx.http.runtime.devmode.DevConsoleRecorder.addInfo(DevConsoleRecorder.java:33) at io.quarkus.deployment.steps.DevConsoleProcessor$runtimeTemplates308161071.deploy_0(Unknown Source) at io.quarkus.deployment.steps.DevConsoleProcessor$runtimeTemplates308161071.deploy(Unknown Source) ... 13 more
Check spring too. Check use of invalid classes/resources etc for other solver properties too.