![](/img/trans.png)
[英]Using Drools types from one drl file in rules in another drl file
[英]Referencing a function from another drl file in a separate maven project
我有多个 maven 项目,其中包含 DROOLs drl 文件。 我想将辅助函数之类的东西放在一个中央位置,然后让其他项目中的 drls 能够使用它们,但它不起作用。
公共项目是其他项目中的 maven 依赖项。 我可以证明这是有效的,因为我可以访问我在公共项目中定义的事实,但我无权访问函数。
我最初尝试创建一个名为:helperfunctions.drl 的文件,并将这些函数直接放在文件中,认为它们在构建时无需任何导入就可以使用,但找不到。
然后我尝试将函数包装在 declare HelperFunctions 结尾,但这种语法不起作用。
最后,我尝试将文件更改为 HelperFunctions.java 并执行 public class HelperFunctions 并制作所有方法 static。然后在其他项目 drls 中,我使用命名空间 com.myproject.common 导入。
我没有选择,还有什么我可以尝试的吗?或者这是不可能的?
我有点不清楚你尝试了什么,但是如果你的类路径上有 Jar,则可以从规则中调用依赖项中的 Java 代码(你的第 3 点)。
假设您的项目设置如下:
|-rule-utils (project name)
|-- src\main\java\com\mycompany\common\HelperFunctions.java
|--pom.xml
并且您在 HelperFunctions class 中定义了一些实用程序 function 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
根据我的经验,以这种方式调用第三方实用程序代码是很常见的,例如 Apache 公共实用程序类,如StringUtils
和CollectionUtils
(尽管在左侧比在结果中更常见。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.