Debugging 运行Drools时出错-我应该如何调试?

Debugging 运行Drools时出错-我应该如何调试?,debugging,drools,optaplanner,Debugging,Drools,Optaplanner,我在一个Java程序中有一个Drools文件(在本例中是Optaplanner的一个变体),我正在Netbeans 8上构建它。运行程序时,我收到一条错误消息: Exception in thread "main" java.lang.IllegalArgumentException: The scoreDrl (taskassignment/solver/taskAssignmentScoreRules.drl) does not exist as a classpath resource.

我在一个Java程序中有一个Drools文件(在本例中是Optaplanner的一个变体),我正在Netbeans 8上构建它。运行程序时,我收到一条错误消息:

Exception in thread "main" java.lang.IllegalArgumentException: The scoreDrl (taskassignment/solver/taskAssignmentScoreRules.drl) does not exist as a classpath resource.
at org.optaplanner.core.config.score.director.ScoreDirectorFactoryConfig.buildKieBase(ScoreDirectorFactoryConfig.java:304)
at org.optaplanner.core.config.score.director.ScoreDirectorFactoryConfig.buildDroolsScoreDirectorFactory(ScoreDirectorFactoryConfig.java:279)
at org.optaplanner.core.config.score.director.ScoreDirectorFactoryConfig.buildScoreDirectorFactory(ScoreDirectorFactoryConfig.java:186)
at org.optaplanner.core.config.score.director.ScoreDirectorFactoryConfig.buildScoreDirectorFactory(ScoreDirectorFactoryConfig.java:174)
at org.optaplanner.core.config.solver.SolverConfig.buildSolver(SolverConfig.java:145)
at org.optaplanner.core.config.solver.XmlSolverFactory.buildSolver(XmlSolverFactory.java:101)
at taskassignment.app.TaskAssignmentHelloWorld.main(TaskAssignmentHelloWorld.java:32)
通过谷歌搜索错误表,当drools代码中出现错误时,
似乎不存在,因为类路径资源
是从Optaplanner抛出的

我的问题是,如果没有关于drools文件中错误位置的进一步信息,那么调试这段代码的好方法是什么?有没有什么插件可以帮助我缩小问题的范围,就像Netbeans在Java中通常会遇到的那样

以下是我的Drools代码:

package taskassignment.solver;
dialect "java"

import org.optaplanner.core.api.score.buildin.hardsoft.HardSoftScoreHolder;

import taskassignment.domain.TaskAssignment;
import taskassignment.domain.Task;
import taskassignment.domain.Dev;

global HardSoftScoreHolder scoreHolder;

// ############################################################################
// Hard constraints
// ############################################################################

rule "DevCanOnlyDoOneTask"
when
    $T1:Task
    $T2:Task
    $D:Dev
    (($T1.getAssignedDev()=$D)&&($T2.getAssignedDev()=$D)&&(($T2.getAllottedStartTime()<=$T1.getAllottedStartTime())&&($T1.getAllottedStartTime()<$T2.getAllottedStartTime()+$T2.getDuration()))||(($T1.getAllottedStartTime()<=$T2.getAllottedStartTime())&&($T2.getAllottedStartTime()<$T1.getAllottedStartTime()+$T1.getDuration()))

then
    scoreHolder.addHardConstraintMatch(kcontext,-1000);
end

// ############################################################################
// Soft constraints
// ############################################################################

rule "MaximiseEarliestFinishTime"
when
    $TA: TaskAssignment
    $EFT: $TA.getEFT()

then
    scoreHolder.addSoftConstraintMatch(kcontext,+$EFT);
package tasksignment.solver;
方言“java”
导入org.optaplanner.core.api.score.buildin.hardsoft.hardsoftcoreholder;
导入tasksignment.domain.tasksignment;
导入tasksignment.domain.Task;
导入tasksignment.domain.Dev;
全球硬软件记分员;
// ############################################################################
//硬约束
// ############################################################################
规则“DevCanOnlyDoOneTask”
什么时候
$T1:任务
$T2:任务
$D:Dev

($T1.getAssignedDev()=$D)&&($T2.getAssignedDev()=$D)&($T2.getAllottedStartTime()当drools(DRL)代码中出现错误时,它会抛出一个不同的异常,来自drools,并说明错误消息在DRL中的哪一行

信息

The scoreDrl (taskassignment/solver/taskAssignmentScoreRules.drl) does not exist as a classpath resource.
意味着您已在解算器配置中配置了此选项

<scoreDrl>taskassignment/solver/taskAssignmentScoreRules.drl</scoreDrl>
在6.0中,您需要配置:

<scoreDrl>/taskassignment/solver/taskAssignmentScoreRules.drl</scoreDrl>
<scoreDrl>taskassignment/solver/taskAssignmentScoreRules.drl</scoreDrl>
/taskassignment/solver/taskAssignmentScoreRules.drl
在6.1中,您需要配置:

<scoreDrl>/taskassignment/solver/taskAssignmentScoreRules.drl</scoreDrl>
<scoreDrl>taskassignment/solver/taskAssignmentScoreRules.drl</scoreDrl>
taskassignment/solver/taskAssignmentScoreRules.drl

注意:您可能希望遵循java约定并使用反向url名称空间。因此,我将使用
com/mycompany/tasksignment/solver/…
,而不是
com/mycompany/tasksignment/solver/…

是否确定指向drl文件的路径正确?如果使用其他名称重命名该文件会怎样?是否看到同样的错误?我不认为Optaplanner在资源包含错误时抛出“不作为类路径资源存在”…如果这是真的,那么你应该打开一个Jira来修复它。你在哪里有drl?你使用的是什么版本的Optaplanner?你的配置文件是什么样子的?谢谢Geoffrey。我确实错过了e> /
。我从一个更早的版本中看到了一个答案,这个错误意味着drools文件有一个错误好消息:在6.1中,你不需要前导的
/
,如果你把它放在6.1中,错误消息清楚地说你不应该有前导的
/