我怎样才能通过 "There is an error in a scoreDrl or scoreDrlFile"?
How can I get past "There is an error in a scoreDrl or scoreDrlFile"?
我使用 OpenJDK 11.0.11 和 Optaplanner 8.7.0 编写了一个“最小”应用程序。我正在用 Maven 构建它,运行 它作为一个 jar。
到目前为止一切顺利,因为这适用于 easyScoreCalculatorClass,但一旦我开始使用 Drools,我就无法通过以下错误:
Exception in thread "main" java.lang.IllegalStateException: There is an error in a scoreDrl or scoreDrlFile.
at org.optaplanner.core.impl.score.director.ScoreDirectorFactoryFactory.buildDroolsScoreDirectorFactory(ScoreDirectorFactoryFactory.java:323)
at org.optaplanner.core.impl.score.director.ScoreDirectorFactoryFactory.decideMultipleScoreDirectorFactories(ScoreDirectorFactoryFactory.java:108)
at org.optaplanner.core.impl.score.director.ScoreDirectorFactoryFactory.buildScoreDirectorFactory(ScoreDirectorFactoryFactory.java:73)
at org.optaplanner.core.impl.solver.DefaultSolverFactory.buildScoreDirectorFactory(DefaultSolverFactory.java:116)
at org.optaplanner.core.impl.solver.DefaultSolverFactory.buildSolver(DefaultSolverFactory.java:83)
at ch.twohundredok.compute.App.main(App.java:56)
Caused by: java.lang.NullPointerException
at org.kie.internal.utils.KieHelper.<init>(KieHelper.java:46)
at org.optaplanner.core.impl.score.director.ScoreDirectorFactoryFactory.buildDroolsScoreDirectorFactory(ScoreDirectorFactoryFactory.java:290)
... 5 more
一调用solverFactory.buildSolver()
就出现异常。
这是我尝试使用的最小 drools 文件:
package myapp;
dialect "java"
import myapp.domain.Employee;
import org.optaplanner.core.api.score.buildin.hardsoft.HardSoftScoreHolder;
global HardSoftScoreHolder scoreHolder;
rule "firstRule"
when
Employee()
then
scoreHolder.addHardConstraintMatch(kcontext, -1);
end
- 如何获得有关该错误的更多信息?
- 只是我的 Drools 文件损坏了吗?
- 我还漏掉了什么吗?
不幸的是,当出现问题时,Drools 并不擅长异常处理。我在您提供的代码中没有看到任何明显的错误,而且失败来自 KieHelper
的事实很奇怪。也就是说,我没有任何信息可以继续,需要访问您的项目才能找到更多信息。
过去,人们在 Maven 中使用 Drools 构建可执行 JAR 时遇到过几个问题。请参阅 this question 了解其中一个问题,包括。解决方案。
就是说,如果您的项目才刚刚开始,我建议您改用 Constraint Streams。编程模型非常相似,但代码很简单 Java,因此您可以获得所有 IDE 魔法,例如自动完成、编译器检查等
我使用 OpenJDK 11.0.11 和 Optaplanner 8.7.0 编写了一个“最小”应用程序。我正在用 Maven 构建它,运行 它作为一个 jar。
到目前为止一切顺利,因为这适用于 easyScoreCalculatorClass,但一旦我开始使用 Drools,我就无法通过以下错误:
Exception in thread "main" java.lang.IllegalStateException: There is an error in a scoreDrl or scoreDrlFile.
at org.optaplanner.core.impl.score.director.ScoreDirectorFactoryFactory.buildDroolsScoreDirectorFactory(ScoreDirectorFactoryFactory.java:323)
at org.optaplanner.core.impl.score.director.ScoreDirectorFactoryFactory.decideMultipleScoreDirectorFactories(ScoreDirectorFactoryFactory.java:108)
at org.optaplanner.core.impl.score.director.ScoreDirectorFactoryFactory.buildScoreDirectorFactory(ScoreDirectorFactoryFactory.java:73)
at org.optaplanner.core.impl.solver.DefaultSolverFactory.buildScoreDirectorFactory(DefaultSolverFactory.java:116)
at org.optaplanner.core.impl.solver.DefaultSolverFactory.buildSolver(DefaultSolverFactory.java:83)
at ch.twohundredok.compute.App.main(App.java:56)
Caused by: java.lang.NullPointerException
at org.kie.internal.utils.KieHelper.<init>(KieHelper.java:46)
at org.optaplanner.core.impl.score.director.ScoreDirectorFactoryFactory.buildDroolsScoreDirectorFactory(ScoreDirectorFactoryFactory.java:290)
... 5 more
一调用solverFactory.buildSolver()
就出现异常。
这是我尝试使用的最小 drools 文件:
package myapp;
dialect "java"
import myapp.domain.Employee;
import org.optaplanner.core.api.score.buildin.hardsoft.HardSoftScoreHolder;
global HardSoftScoreHolder scoreHolder;
rule "firstRule"
when
Employee()
then
scoreHolder.addHardConstraintMatch(kcontext, -1);
end
- 如何获得有关该错误的更多信息?
- 只是我的 Drools 文件损坏了吗?
- 我还漏掉了什么吗?
不幸的是,当出现问题时,Drools 并不擅长异常处理。我在您提供的代码中没有看到任何明显的错误,而且失败来自 KieHelper
的事实很奇怪。也就是说,我没有任何信息可以继续,需要访问您的项目才能找到更多信息。
过去,人们在 Maven 中使用 Drools 构建可执行 JAR 时遇到过几个问题。请参阅 this question 了解其中一个问题,包括。解决方案。
就是说,如果您的项目才刚刚开始,我建议您改用 Constraint Streams。编程模型非常相似,但代码很简单 Java,因此您可以获得所有 IDE 魔法,例如自动完成、编译器检查等