Ant构建成功,甚至syntaxx错误

问题描述:

我使用Drools的DroolsCompilerAntTask建立包二进制文件,如下面Ant构建成功,甚至syntaxx错误

<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> 

但是当我运行的版本。我能够得到错误信息,甚至出现构建仍显示成功的错误。

rule-clean: 
rules: 
[compiler] [8,0]: [ERR 107] Line 8:0 mismatched input 'asdasd' expecting one of the following tokens: '[package, import, global, declare, function, rule, query]'. 
[compiler] [0,0]: Parser returned a null Package 
[compiler] [8,0]: [ERR 107] Line 8:0 mismatched input 'asdasd' expecting one of the following tokens: '[package, import, global, declare, function, rule, query]'. 
[compiler] [0,0]: Parser returned a null Package 

BUILD SUCCESSFUL 
Total time: 41 seconds 

有没有解决方案让流水编译器失败时生成失败?

+0

你使用的是什么版本的流口水? –

+0

5.4.0.Final从drools回购 – logger

查看您正在使用的org.drools.contrib.DroolsCompilerAntTask的源代码,我想我知道发生了什么。不幸的是,这似乎是这个班的一个错误。

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

org.drools.contrib.DroolsCompilerAntTask使用2种方法来编译资源:

这两种方法后,他们完成编译你指定的资源确实会检查错误;这里唯一的问题是,如果有编译错误,它们只是打印到控制台上而没有其他的东西。在这种情况下不会有任何例外。例如,这是多么void compileAndAddFiles(PackageBuilder pbuilder)涉及错误:

if (pbuilder.hasErrors()) { 
    System.err.println(pbuilder.getErrors().toString()); 
} 

我想,你在这里最好的选择是克隆droolsjbpm-tools项目(使用分支5.4.x)和System.err.println报表后的提到的方法添加throw new IllegalStateException()或类似的东西。 code that is actually invokingcompileAndAddFiles()方法实际上捕捉到任何异常并用BuildException包装它。我不是Ant专家,但我认为这应该足以让任务失败。

希望它有帮助,

+0

感谢您的解释,我想知道为什么错误持续时,drools编译错误,仍然使构建通过。 – logger