Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Ant构建成功甚至syntaxx错误_Java_Ant_Build_Drools - Fatal编程技术网

Java Ant构建成功甚至syntaxx错误

Java Ant构建成功甚至syntaxx错误,java,ant,build,drools,Java,Ant,Build,Drools,我正在使用Drools DroolsCompileranTask构建包二进制文件,如下所示 <taskdef name="compiler" classname="org.drools.contrib.DroolsCompilerAntTask" classpathref="drools.path" /> <target name="rules" > <compiler binformat="package" srcdir=

我正在使用Drools DroolsCompileranTask构建包二进制文件,如下所示

 <taskdef name="compiler" classname="org.drools.contrib.DroolsCompilerAntTask" classpathref="drools.path" />

  <target name="rules" >
    <compiler
      binformat="package" 
      srcdir="${path}/src/rules"
      tofile="${path}/build/rules.pkg"
      classpathref="compile.classpath" >
      <include name="*.drl" />
      <include name="*.brl" />
      <include name="*.xml" />
    </compiler>
  </target>

当drool编译器失败时,是否有任何解决方案使构建失败?

查看您正在使用的源代码,我想我知道发生了什么。不幸的是,这似乎是这个类中的一个bug

通过设计(我们可以争论这是一个好的设计还是一个坏的设计),当正在编译的资源之一包含错误时,Drools编译器不会失败(抛出任何异常)。您在控制台中看到的输出确实是编译器发现的编译错误,但这并不意味着编译器本身失败。在Drools中,编译一些资源后,需要手动检查是否有错误

该类使用2个方法编译资源:

  • (我认为这是您的任务实际使用的)
这两种方法在编译完您指定的资源后都会检查错误;这里唯一的问题是,如果有编译错误,它们只会打印到控制台,而不会打印其他内容。在这种情况下,不会抛出任何异常。例如,这是如何处理错误的:

if (pbuilder.hasErrors()) {
    System.err.println(pbuilder.getErrors().toString());
}
我想您在这里的最佳选择是克隆
droolsjbpm工具
project(使用分支
5.4.x
),并在上述方法中的
System.err.println
语句后添加
抛出新的IllegalStateException()
或类似的内容。
compileAndFiles()
方法实际上是捕获任何异常并用
BuildException
包装它。我不是蚂蚁专家,但我认为这足以让任务失败


希望能有所帮助,

您使用的是什么版本的drools?5.4.0.Final来自drools report感谢您的解释,我想知道为什么drools编译时出错,而构建仍然通过。
if (pbuilder.hasErrors()) {
    System.err.println(pbuilder.getErrors().toString());
}