2014-02-05 11 views
6

Ich möchte meine .drl-Dateien in .class-Dateien vorkompilieren, damit sie nicht zur Laufzeit kompiliert werden müssen. Die Dokumentation macht es so, als ob das Kie-Maven-Plugin dies tut, aber es erzeugt nichts für mich. Er kompiliert die Regeldateien, gibt aber nichts aus. Irgendwelche Vorschläge?Wie kompilieren Sie Drools-Regeln?

Ich bin mit dem mvn Paket Befehl ein, und meine pom.xml Datei unter:

<?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> 
+2

DRL-Dateien werden nicht in .class-Dateien kompiliert. Sie werden kompiliert, wenn Sie eine Wissensdatenbank mit ihnen erstellen. Die Erstellung dieser Wissensbasis sollte während des Starts Ihrer Anwendung erfolgen. – Steve

+0

Ich denke, ich misspoke, ich meine kompilieren in Binärform wie in der Dokumentation beschrieben: Die "Runtime" Anforderungen hier sind, wenn Sie Regeln als ihre binäre Form bereitstellen (entweder als KnowledgePackage Objekte oder KnowledgeBase Objekte usw.). Dies ist eine optionale Funktion, mit der Sie Ihre Laufzeit sehr gering halten können. Sie können Drools-Compiler verwenden, um Regelpakete "out of process" zu erstellen und sie dann auf einem Laufzeitsystem bereitzustellen. Dieses Laufzeitsystem benötigt nur drools-core.jar und knowledge-api zur Ausführung. –

+0

Wenn Sie also ein Build erstellen, wird kein Jar im Zielverzeichnis erstellt. Das ist alles, was es tun soll. Es soll keine andere Art von Ausgabe erzeugen. – Steve

Antwort

5

Es gab einen Fehler in 6.0.1.Final, die das Maven Plugin verursacht nicht die kompilierte Bytecode innerhalb der speichern Kjar. Es wurde nachher behoben, wenn Sie also die Version 6.0.2-SNAPSHOT (Community) oder die Version RedHat BRMS 6.0.1.GA (Produkt) verwenden, wird es funktionieren.

BZ-Ticket: https://bugzilla.redhat.com/show_bug.cgi?id=1063255

begehen, die den Fehler behebt: https://github.com/droolsjbpm/drools/commit/94b9ccf810100c7ec3f8ed186111720ddb2729d3

FYI, wenn die richtige Kjar erzeugt wird, enthält es eine kbase.cache Datei in den Topf für jede definierte KBase. Diese Cache-Dateien enthalten den kompilierten Bytecode.

+0

Gibt es eine Möglichkeit, die Java-Dateien auch für Regeln zu generieren/speichern? Manchmal beziehen sich die Fehler auf die Regel-Java-Dateien und es wird nützlich und lehrreich sein, sie zu sehen. –

+1

Sie können die Systemeigenschaft "drools.dump.dir" so einstellen, dass sie auf den Stammordner zeigt, in dem die Java-Dateien abgelegt werden sollen. Bitte beachten Sie, dass nicht alles als Java-Datei generiert wird. Eine Menge wird direkt in Bytecode generiert und nicht gelöscht. –

+0

@EdsonTirelli, gibt es eine Möglichkeit, Komplexitätsmetriken aus diesen Java-Dateien zu berechnen? Vor ein paar Jahren hatte ich eine Idee, die aus Metriken für Drohkulisse in 3D-Form besteht, ähnlich wie bei CodeCity (http://www.inf.usi.ch/phd/wettel/codecity.html). Eine kurze Erklärung meiner Idee finden Sie hier: https://www.linkedin.com/grp/post/1790946-113334735 – Jack

2

Es funktioniert für mich mit kie-maven-plugin 6.1.0.Final, aber Verpackung "kjar" sollte angegeben werden, um KIE-Basis-Cache innerhalb JAR-Datei zu erhalten.