在我们的项目中,我们同时使用-Xlint:all和-Werror。我们有一个基于ANTLR2的解析器,从antlr生成的代码不是很好,并且会发出很多lint警告。因此,我们需要对生成的源代码禁用lint检查。
问题是,生成的源依赖于我们的源(例如,ANTRL允许使用自定义AST节点),而我们的源当然依赖于ANTLR源(即我们使用生成的解析器)。
有没有可能从lint检查中排除源代码,但仍然一起编译它?
(请参阅稍微相关的Maven 3: How to exclude generated sources from Xlint check?)
发布于 2018-08-03 21:45:17
好了,我找到了一个解决方案。
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文件。
https://stackoverflow.com/questions/51668979
复制相似问题