Как вы предварительно компилируете правила Drools?

Я хочу предварительно скомпилировать файлы .drl в файлы .class, чтобы их не нужно было компилировать во время выполнения. Документация звучит так, как будто kie-maven-plugin делает это, но для меня он ничего не генерирует. Он компилирует файлы правил, но ничего не выводит. Какие-либо предложения?

Я использую команду пакета mvn, и мой файл pom.xml ниже:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>org.kie</groupId>
    <artifactId>kie-parent-with-dependencies</artifactId>
    <version>6.0.1.Final</version>
    <!-- relativePath causes out-of-date problems on hudson slaves -->
    <!--<relativePath>../droolsjbpm-build-bootstrap/pom.xml</relativePath>-->
  </parent>

  <packaging>kjar</packaging>
  <artifactId>default-kiesession</artifactId>
  <name>Drools API examples - Default KieSession</name>

  <dependencies>
    <dependency>
      <groupId>org.drools</groupId>
      <artifactId>drools-compiler</artifactId>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.kie</groupId>
        <artifactId>kie-maven-plugin</artifactId>
        <version>6.0.1.Final</version>
        <extensions>true</extensions>
        <dependencies>
          <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <version>1.6.1</version>
          </dependency>
      </dependencies>
      </plugin>
    </plugins>
  </build>

  <repositories>
    <!-- Bootstrap repository to locate the parent pom when the parent pom has not been build locally. -->
    <repository>
      <id>jboss-public-repository-group</id>
      <name>JBoss Public Repository Group</name>
      <url>http://repository.jboss.org/nexus/content/groups/public/</url>
      <layout>default</layout>
      <releases>
        <enabled>true</enabled>
        <updatePolicy>never</updatePolicy>
      </releases>
      <snapshots>
        <enabled>true</enabled>
        <updatePolicy>daily</updatePolicy>
      </snapshots>
    </repository>
  </repositories>

  <scm>
    <connection>scm:git:[email protected]:droolsjbpm/drools.git</connection>
    <developerConnection>scm:git:[email protected]:droolsjbpm/drools.git</developerConnection>
    <url>https://github.com/droolsjbpm/drools</url>
  </scm>
</project>

person Scott Thibault    schedule 05.02.2014    source источник
comment
Файлы DRL не компилируются в файлы .class. Они компилируются, когда вы создаете с ними базу знаний. Создание этой базы знаний должно происходить во время запуска вашего приложения.   -  person Steve    schedule 06.02.2014
comment
Думаю, я оговорился, я имею в виду компиляцию в двоичную форму, как описано в документации: упомянутые здесь требования к среде выполнения относятся к тому, если вы развертываете правила в их двоичной форме (либо в виде объектов KnowledgePackage, либо объектов базы знаний и т. д.). Это необязательная функция, позволяющая значительно сократить время выполнения. Вы можете использовать drools-compiler для создания пакетов правил вне процесса, а затем развернуть их в системе выполнения. Эта система времени выполнения требует только drools-core.jar и Knowledge-API для выполнения.   -  person Scott Thibault    schedule 06.02.2014
comment
Итак, когда вы строите, это не создает Jar в целевом каталоге? Это все, что он должен делать. Он не должен производить какой-либо другой вывод.   -  person Steve    schedule 06.02.2014
comment
Да, теперь я вижу, что плагин maven не делает то, что я искал, но как вы это делаете? Есть ли инструмент для создания сериализованных объектов KnowledgePackage? Или, может быть, пример кода для сборки и развертывания пакетов таким образом?   -  person Scott Thibault    schedule 07.02.2014
comment
JAR содержит скомпилированный пакет знаний, поэтому вам не нужно включать drools-compiler в путь к классам вашего приложения. Вы просто включаете Jar, который он создает, как зависимость для вашего приложения, вместо того, чтобы компилировать правила во время выполнения. Я немного озадачен тем, что еще вы, возможно, пытаетесь сделать и почему вы вообще хотите попытаться сделать что-то еще...   -  person Steve    schedule 07.02.2014
comment
В моем файле jar не создается пакет знаний. Когда я пытаюсь запустить его, я получаю сообщение об ошибке: jar Eclipse JDT Core не находится в пути к классам.   -  person Scott Thibault    schedule 07.02.2014
comment
@Scott Thibault Я также пытаюсь использовать kie-maven-plugin, но не вижу, был ли выполнен плагин, когда я запускаю mvn clean install. Есть ли какие-либо другие шаги, которые мне нужно выполнить.   -  person vashishth    schedule 02.06.2014
comment
Как вы можете сказать, что это компилирует артефакты правил. Вы видите, что этот плагин работает в журналах maven. Я пробовал то же самое, и я не нашел никаких журналов для этого в журналах компиляции maven.   -  person vashishth    schedule 11.06.2014


Ответы (3)


В 6.0.1.Final была ошибка, из-за которой плагин maven не сохранял скомпилированный байт-код внутри kjar. Это было исправлено позже, поэтому, если вы возьмете версию 6.0.2-SNAPSHOT (сообщество) или версию RedHat BRMS 6.0.1.GA (продукт), она будет работать.

Билет BZ: https://bugzilla.redhat.com/show_bug.cgi?id=1063255< /а>

коммит, исправляющий ошибку: https://github.com/droolsjbpm/drools/commit/94b9ccf810100c7ddec3f8ed180611 а>

К вашему сведению, когда создается правильный kjar, он содержит файл kbase.cache внутри jar для каждого определенного kbase. Эти файлы кеша содержат скомпилированный байт-код.

person Edson Tirelli    schedule 07.03.2014

У меня это работает с kie-maven-plugin 6.1.0.Final, но необходимо указать упаковку «kjar», чтобы получить базовый кеш KIE внутри файла jar.

person Serge    schedule 16.09.2015

Это описано в Drools документация. Просто для тех, кто найдет это первым сообщением для «предварительной компиляции gdst» в Google ;-). Вы должны определить generateModel=YES при компиляции. В командной строке mvn -DgenerateModel=YES или в pom.xml внутри раздела kie-maven-plugin <configuration> с <generateModel>YES</generateModel>

person user2428804    schedule 07.11.2019