在单独的 Maven 项目中引用另一个 drl 文件的函数

Referencing a function from another drl file in a separate maven project

我有多个 Maven 项目,其中包含 DROOLs drl 文件。我想把辅助函数之类的东西放在一个中心位置,然后让其他项目中的 drls 能够使用它们,但它不起作用。

common项目是其他项目中的maven依赖。我可以证明这是有效的,因为我可以访问我在公共项目中定义的事实,但我无法访问函数。

  1. 我最初尝试创建一个名为: helperfunctions.drl 并将函数直接放在文件中,认为它们在构建时无需任何导入即可使用,但找不到。

  2. 然后我尝试将函数包装在声明 HelperFunctions 的结尾,但这种语法不起作用。

  3. 最后,我尝试将文件更改为 HelperFunctions.java 并执行 public class HelperFunctions 并将所有方法设为静态。然后在我使用命名空间 com.myproject.common.

    导入的另一个项目 drls 中

我别无选择,还有什么我可以尝试的吗?或者这不可能吗?

我不太清楚你的尝试,但是 Java 如果你的 [=33] 上有 Jar,则可以从规则中调用来自依赖项的代码(你的第 3 点) =]路径。

假设您的项目设置如下:

|-rule-utils (project name)
|-- src\main\java\com\mycompany\common\HelperFunctions.java
|--pom.xml

并且您在 HelperFunctions class.

中定义了一些实用函数 public static void doSomethingUseful()

在您存在规则的其他项目中,您可以将 project1 jar 作为依赖项包含在您的 pom 中,可能如下所示:

<dependency>
  <artifactId>rule-utils</artifactId>
  <groupId>com.mycompany</groupId>
</dependency>

然后您可以导入和使用 HelperFunctions 及其 doSomethingUseful 方法,就像您在 drl 中导入和使用任何其他 Java 代码一样:

import com.mycompany.common.HelperFunctions;

rule "Example rule"
when
then
  HelperFunctions.doSomethingUseful();
end

根据我的经验,以这种方式调用 third-party 实用程序代码是很常见的,例如 Apache commons 的实用程序 class 像 StringUtilsCollectionUtils (尽管在左侧比在后果中更常见。)