【问题标题】:ant: compile as as most classes as possible in case of compile errorsant:编译尽可能多的类以防编译错误
【发布时间】:2012-05-14 13:09:34
【问题描述】:

如果出现编译错误,antjavac任务不会编译所有可以编译的类。似乎javac 任务(或编译器本身)会在遇到第一个错误时立即停止。

failonerror 属性对此行为没有任何影响。 我没有设置compile 属性(因此,使用了Oracle JDK 的编译器)。

如果出现编译错误,是否可以编译尽可能多的类?
(最好不依赖任何特定的编译器)

一个用例是在开发过程中:
想象一下,您正在实现一些新功能,但还没有完成,编译错误仍然存​​在。
同时,您需要修复一些其他错误并确保没有损坏,您需要执行由 IDE 项目工作区中的 ant 任务调用的标准测试套件。 ant 任务尝试编译所有类/测试类,但由于您正在开发的类中的编译错误而失败。

告诉 ant/javac 不要因编译错误而失败,以便能够执行尽可能多的测试用例,这将非常有帮助。

【问题讨论】:

  • 您正在寻找的行为非常不寻常。如果你解释一下你为什么想要这种行为,你可能会更好地找到解决方案......
  • @Baqueta 我已经更新了问题。

标签: java ant compilation build-automation


【解决方案1】:

这与ant 无关,javac 会在出错时停止并且永远不会给你任何类文件。 failonerror 属性只是说明如果编译返回错误,构建应该继续还是停止。

从 1.3 开始:http://docs.oracle.com/javase/1.3/docs/tooldocs/tools-changes.html

“当新的 1.3 编译器在编译过程中检测到源文件中的错误时,它会继续解析剩余的源文件并尝试识别它们可能包含的任何进一步的错误。对于其余的代码生成被完全抑制但是,不会生成任何类文件,即使对于不包含错误的编译单元也是如此。”

您可能想使用其他一些编译器,例如 jikes。但实际上,谁会希望运行部分编译的类?

【讨论】: