当前位置: 首页 > 知识库问答 >
问题:

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

夹谷琨
2023-03-14

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

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)

在Googles错误mesage之后,似乎并不存在,因为当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);

谢谢伙计们

共有1个答案

丁念
2023-03-14

当drools(DRL)代码出现错误时,它会抛出一个不同的异常,来自drools,并说明错误消息在DRL的哪一行。

信息

The scoreDrl (taskassignment/solver/taskAssignmentScoreRules.drl) does not exist as a classpath resource.

意味着您已经在求解器配置中配置了

<scoreDrl>taskassignment/solver/taskAssignmentScoreRules.drl</scoreDrl>
PROJECT_DIR/src/main/resources/taskassignment/solver/taskAssignmentScoreRules.drl

在6.0中,您需要配置:

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

在6.1中,您需要配置:

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

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

 类似资料:
  • 我是新的火花,我试图创建一个图形框架,并对这是我的代码做一些查询 但结果显示以下错误: 我怎样才能解决这个问题,谢谢!

  • 开始调试时,出现以下错误: 正在启动lib\main。调试模式下ONEPLUS A5000上的dart。。。lib\main。dart:1E/AndroidRuntime(11211):以书面形式命名,pkgName:com。刚出现的包裹azabazar E/AndroidRuntime(11211):致命异常:主E/AndroidRuntime(11211):进程:com。刚出现的包裹阿扎巴扎,

  • 您好,我在运行我的java和javafx文件时遇到了一个问题。我已经安装了java和JDK。如果我单击应用程序,当我尝试从cmd运行i时,什么都没有发生。显示如下:在此处输入图像描述 我已经搜索了一半的谷歌,但没有找到一个适合我的解决方案。如果有人能帮我解决这个问题,那太好了,因为我是一个编程新手,只想运行一个简单的WidgetShortcut应用程序。

  • 问题内容: 我正在写一个Java库,实际上是一个Clojure库,但是对于这个问题,重要的是它在JVM上运行。该库需要执行一些JavaScript。我尝试过Nashorn,但遇到了一些局限性,可能难以克服。另外,我想尝试NodeJS。 我希望我的库是独立的,不依赖于独立运行NodeJS的系统,因此需要一种特殊的部署机制将Java和NodeJS工件放置在正确的位置,以便由两个不同的网络服务器接收。但

  • 问题内容: 这个问题与编程没有严格关系,但是对于程序员来说肯定是重要的。 我写了一个简单的smtp服务器,当我从控制台运行它时,一切都很好,只是它阻止了命令行。 我知道我可以通过运行它 或通过屏幕/ tmux等 但是问题是,我应该如何实现我的程序在后台运行,并且系统管理员可以很高兴地设置和管理该程序? 有些人比我有更多的经验,在golang- nuts上 写道,他们不使用fork等,而是使用mon

  • 我一直在努力让它工作,我想我可以使用一些帮助。我正在做一个Java项目,其中pom.xml有一堆依赖项,其中一些依赖项本身间接依赖于这个jar:如下: 我在pom中需要这个特殊的jar,因为我想使用jax rs api中的新特性:。问题是,当我构建项目时,会出现以下错误: 我试图通过排除来自通过检查依赖关系树包含它的依赖关系。 现在该项目构建良好,但当我尝试运行它时,我得到了这个错误: 似乎需要球