如何通过 ant 构建脚本编译 .drl 文件

CKi*_*ing 5 ant drools

我是 Drools 的新手。我想知道是否可以使用某种可以在 Windows 命令行(shell/cmd)中输入的命令来编译 .drl 文件。我查看了 drools 发行版附带的二进制文件,但我无法找到编译 .drl 文件的方法。我对这样的命令感兴趣的原因是我想编写一个 ant 构建文件,它将编译我的 java 类和规则并创建一个 jar。这个 jar 应该是自给自足的,即从命令行运行 jar 应该运行主程序,该程序在会话中传递事实,从而自动执行对这些事实进行操作的规则。

Per*_*ion 2

曾经DroolsCompilerAntTask是这样做的方式。它将获取所有各种规则文件并将它们编译成序列化文件。5.3 中似乎存在一些错误,但我目前正在尝试解决这些错误。同时,这里有一个说明性的构建文件,可用于创建基于 Drools 的可执行 JAR。如果无法编译规则,则构建将失败。

<project name="DroolsProto" default="dist" basedir=".">
  <property name="build.src" location="src"/>
  <property name="build.target" location="target"/>
  <property name="build.dist"  location="dist"/>
  <property name="build.artifact" value="droolsproto"/>
  <property name="one-jar.dist.dir" value="~/Work/Data/Misc/OneJar"/>   
  <property name="one-jar.version" value="0.97"/>
  <property name="one-jar.ant.jar" value="${one-jar.dist.dir}/one-jar-ant-task-${one-jar.version}.jar"/>

  <path id="build.lib.path">
    <fileset dir="${build.src}/lib">
      <include name="**/*.jar"/>
    </fileset>
  </path>

  <taskdef name="one-jar" classname="com.simontuffs.onejar.ant.OneJarTask"
      classpath="${one-jar.ant.jar}" onerror="report"/>

  <taskdef name="droolscompiler" classname="org.drools.contrib.DroolsCompilerAntTask">
    <classpath refid="build.lib.path"/>
  </taskdef> 

  <target name="clean">
    <delete dir="${build.target}"/>
    <delete dir="${build.dist}"/>
  </target>

  <target name="init">
    <tstamp/>
    <mkdir dir="${build.target}"/>
    <mkdir dir="${build.dist}"/>
  </target>

  <target name="compile" depends="init">
    <mkdir dir="${build.target}/classes"/>
    <javac srcdir="${build.src}/main/java" destdir="${build.target}/classes">
      <classpath refid="build.lib.path"/>
      <include name="**/*.java"/>
      <exclude name="**/*Test.java"/>
    </javac>
  </target>

  <target name="verify-rules">
    <droolscompiler srcDir="${build.src}/main/resources" toFile="${build.target}/classes/foo.foo">
      <classpath refid="build.lib.path"/>
    </droolscompiler>
  </target>

  <target name="verify-resources" depends="verify-rules"/>

  <target name="bundle-resources" depends="verify-resources">
    <copy todir="${build.target}/classes">
      <fileset dir="${build.src}/main/resources"/>
    </copy>
  </target>

  <target name="dist" depends="compile, bundle-resources">
    <one-jar destfile="${build.dist}/${build.artifact}.jar">
      <manifest>
        <attribute name="One-Jar-Main-Class" value="org.drools.examples.HelloWorldExample"/>
      </manifest>
      <main>
        <fileset dir="${build.target}/classes"/>
      </main>
      <lib>
        <fileset dir="${build.src}/lib">
          <include name="**/*.jar"/>
        </fileset>
      </lib>
    </one-jar>
  </target>
</project>
Run Code Online (Sandbox Code Playgroud)

请注意,构建使用One-Jar来创建独立的可执行文件,您可能希望用您选择的“Super Jar™”工具替换它。据称还有一个DroolsVerifierAntTask可以检查规则中的逻辑错误(而不是语法错误),但我没有这方面的实践经验。