Spring/Optaplanner应用报错:未导入Truth Maintenance System
Spring/OptaPlanner应用启动报错:缺少drools-tms依赖
环境信息
- OptaPlanner版本:8.19.0.Final
- Spring Boot版本:2.2.7.RELEASE
错误提示
你正在尝试使用真值维护系统(TMS)但未引入相关依赖,请将
org.drools:drools-tms模块添加到类路径中。
完整报错堆栈
Caused by: java.lang.IllegalStateException: There is an error in a scoreDrl or scoreDrlFile. 2022-10-24T20:49:11.164109+00:00 app[web.1]: at org.optaplanner.constraint.drl.AbstractDrlScoreDirectorFactoryService.buildScoreDirectorFactory(AbstractDrlScoreDirectorFactoryService.java:61) 2022-10-24T20:49:11.164109+00:00 app[web.1]: at org.optaplanner.constraint.drl.DrlScoreDirectorFactoryService.lambda$buildScoreDirectorFactory$0(DrlScoreDirectorFactoryService.java:47) 2022-10-24T20:49:11.164109+00:00 app[web.1]: at org.optaplanner.core.impl.score.director.ScoreDirectorFactoryFactory.decideMultipleScoreDirectorFactories(ScoreDirectorFactoryFactory.java:137) 2022-10-24T20:49:11.164109+00:00 app[web.1]: at org.optaplanner.core.impl.score.director.ScoreDirectorFactoryFactory.buildScoreDirectorFactory(ScoreDirectorFactoryFactory.java:55) 2022-10-24T20:49:11.164110+00:00 app[web.1]: at org.optaplanner.core.impl.solver.DefaultSolverFactory.buildScoreDirectorFactory(DefaultSolverFactory.java:177) 2022-10-24T20:49:11.164110+00:00 app[web.1]: at org.optaplanner.core.impl.solver.DefaultSolverFactory.<init>(DefaultSolverFactory.java:87) 2022-10-24T20:49:11.164110+00:00 app[web.1]: at org.optaplanner.core.api.solver.SolverFactory.create(SolverFactory.java:122) 2022-10-24T20:49:11.164110+00:00 app[web.1]: at org.optaplanner.spring.boot.autoconfigure.OptaPlannerAutoConfiguration.solverFactory(OptaPlannerAutoConfiguration.java:115) 2022-10-24T20:49:11.164111+00:00 app[web.1]: at org.optaplanner.spring.boot.autoconfigure.OptaPlannerAutoConfiguration$$EnhancerBySpringCGLIB$$43d387fa.CGLIB$solverFactory$1(<generated>) 2022-10-24T20:49:11.164111+00:00 app[web.1]: at org.optaplanner.spring.boot.autoconfigure.OptaPlannerAutoConfiguration$$EnhancerBySpringCGLIB$$43d387fa$$FastClassBySpringCGLIB$$f1672db8.invoke(<generated>) 2022-10-24T20:49:11.164111+00:00 app[web.1]: at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:244) 2022-10-24T20:49:11.164112+00:00 app[web.1]: at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:331) 2022-10-24T20:49:11.164112+00:00 app[web.1]: at org.optaplanner.spring.boot.autoconfigure.OptaPlannerAutoConfiguration$$EnhancerBySpringCGLIB$$43d387fa.solverFactory(<generated>) 2022-10-24T20:49:11.164113+00:00 app[web.1]: at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 2022-10-24T20:49:11.164113+00:00 app[web.1]: at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 2022-10-24T20:49:11.164113+00:00 app[web.1]: at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 2022-10-24T20:49:11.164113+00:00 app[web.1]: at java.base/java.lang.reflect.Method.invoke(Method.java:566) 2022-10-24T20:49:11.164114+00:00 app[web.1]: at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154) 2022-10-24T20:49:11.164114+00:00 app[web.1]: ... 53 common frames omitted 2022-10-24T20:49:11.164116+00:00 app[web.1]: Caused by: java.lang.RuntimeException: [Message [id=1, kieBase=defaultKieBase, level=ERROR, path=constraints.drl, line=-1, column=0 2022-10-24T20:49:11.164117+00:00 app[web.1]: text=You're trying to use the Truth Maintenance System without having imported it. Please add the module org.drools:drools-tms to your classpath.], Message [id=2, kieBase=defaultKieBase, level=ERROR, path=constraints.drl, line=-1, column=0 2022-10-24T20:49:11.164117+00:00 app[web.1]: text=You're trying to use the Truth Maintenance System without having imported it. Please add the module org.drools:drools-tms to your classpath.]] 2022-10-24T20:49:11.164118+00:00 app[web.1]: at org.kie.internal.utils.KieHelper.getKieContainer(KieHelper.java:106)
解决方案
添加drools-tms依赖
直接在项目的依赖配置中引入org.drools:drools-tms,版本与OptaPlanner版本保持一致(8.19.0.Final):
Maven配置
<dependency> <groupId>org.drools</groupId> <artifactId>drools-tms</artifactId> <version>8.19.0.Final</version> </dependency>
Gradle配置
implementation 'org.drools:drools-tms:8.19.0.Final'
问题原因分析
报错通常由以下两种情况导致:
- 近期修改DRL约束文件,使用了需要TMS支持的特性(比如
insertLogical逻辑断言); - 依赖更新过程中,间接移除了
drools-tms依赖(之前可能由其他依赖自动引入)。
内容的提问来源于stack exchange,提问作者elk-tamer
相关产品推荐
相关产品推荐

