我们在项目中将-Xlint:all
与-Werror
一起使用。我们有一个基于ANTLR2的解析器,而从antlr生成的代码不是很好,并且会发出很多皮棉警告。因此,我们需要对生成的源禁用lint检查。
问题在于,生成的源取决于我们的源(例如,ANTRL允许使用自定义AST节点),而我们的源当然取决于ANTLR源(即,我们使用生成的解析器)。
是否可以从棉绒检查中排除源,但仍将其一起编译?
(请参见稍有关联的Maven 3: How to exclude generated sources from Xlint check?)
答案 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
文件。