Ссылка на функцию из другого файла drl в отдельном проекте maven - PullRequest
0 голосов
/ 03 августа 2020

У меня есть несколько проектов maven с DROOL-файлами в них. Я хотел бы разместить такие вещи, как вспомогательные функции, в центральном месте, а затем позволить drls в других проектах использовать их, но это не работает.

Общий проект является зависимостью maven в другом проекты. Я могу доказать, что это работает, потому что у меня есть доступ к фактам, которые я определяю в общем проекте, но у меня нет доступа к функциям.

  1. Сначала я попытался создать файл с именем : helperfunctions.drl и поместите функции прямо в файл, думая, что они будут доступны без какого-либо импорта при сборке, а они не найдены.

  2. Затем я попытался обернуть функции в объявление HelperFunctions end, но этот синтаксис не работает.

  3. Наконец, я попытался изменить файл на HelperFunctions. java и опубликовал c class HelperFunctions и сделал все методы статичными. c. Затем в другом проекте drls, который я импортировал, используя пространство имен com.myproject.common.

У меня нет вариантов, могу ли я еще что-нибудь попробовать или это невозможно?

1 Ответ

1 голос
/ 10 августа 2020

Мне немного непонятно, что вы пытались сделать, но код Java из зависимости (ваш пункт 3) может быть вызван из правил, если у вас есть Jar в пути к классам.

Представьте, что ваш проект настроен следующим образом:

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

И вы определили некоторую служебную функцию public static void doSomethingUseful() в своем классе HelperFunctions.

В другом вашем проекте, где существуют ваши правила, вы можете включить свою project1 jar в качестве зависимости, возможно, следующим образом в свой pom:

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

И затем вы можете импортировать и использовать HelperFunctions и его метод doSomethingUseful, как любой другой Java код в вашем drl:

import com.mycompany.common.HelperFunctions;

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

По моему опыту, довольно часто таким образом вызывать сторонний служебный код, например служебные классы Apache, такие как StringUtils и CollectionUtils ( хотя чаще с левой стороны, чем в последствиях.)

...