Ant:从-Xlint检查中排除生成的源

时间:2018-08-03 09:01:54

标签: java ant lint

我们在项目中将-Xlint:all-Werror一起使用。我们有一个基于ANTLR2的解析器,而从antlr生成的代码不是很好,并且会发出很多皮棉警告。因此,我们需要对生成的源禁用lint检查。

问题在于,生成的源取决于我们的源(例如,ANTRL允许使用自定义AST节点),而我们的源当然取决于ANTLR源(即,我们使用生成的解析器)。

是否可以从棉绒检查中排除源,但仍将其一起编译?

(请参见稍有关联的Maven 3: How to exclude generated sources from Xlint check?

1 个答案:

答案 0 :(得分:0)

好的,我找到了解决方法。

target name="compile" depends="antlr">
    <mkdir dir="build/classes"/>

    <!-- compile antlr generated sources -->
    <!-- compiles also necessary sources from sourcepath -->
    <javac srcdir="build/antlr" destdir="build/classes" sourcepath="src" classpath="ext/antlr.jar>
    </javac>

    <!-- compile sources -->
    <!-- already prebuilt antlr classes are present -->
    <javac srcdir="src" destdir="build/classes" classpath="ext/antlr.jar">
        <compilerarg value="-Xlint:all"/>
        <compilerarg value="-Werror"/>
        <!-- needed to recompile already compiled sources with lint enabled -->
        <compilerarg value="-Xprefer:source"/>
    </javac>
</target>

第一个javac仅编译antlr生成的源以及antlr生成的代码所依赖的所有必需源。 第二个javac-Xlint:all-Werror编译所有未生成的源,并从antlr生成的代码中重用预构建的类。请注意,-Xprefer:source会强制javac重新编译所有未生成的源,即使第一步中已经存在相应的.class文件。