GWT 编译器:什么时候编译错误是致命的?

GWT Compiler : when is a compilation error fatal?

我正在尝试了解有关 GWT 编译如何工作的更多信息。

更具体地说,我想知道 GWT 如何确定特定错误是致命错误,应用程序编译应该因此失败,以及它如何确定编译成功,即使存在编译错误。

我问的原因是,在搜索时很难区分日志中的合法错误和似乎不会造成任何问题的错误。

我说的是 GWT 2.7 和 GWT 2.8(我看到它们表现出相同的行为)。 另外,如果这有点相关的话,我正在使用 GWTP 1.5.3。

一个具体的例子:我的日志中有这个错误:

Tracing compile failure path for type 'myApp.ClientModule'
Errors in 'file:/E:/data/.../myApp/ClientModule.java'
   Line 24: No source code is available for type myApp.client.ServicesProvidersModuleGen; did you forget to inherit a required module?
Checked 1 dependencies for errors.

上面的错误不会使我的应用程序编译失败,而且 myApp 工作正常(class 是注册一些 GIN 绑定的东西,它也可以工作)。

为什么 GWT 在遇到那个错误时没有让我的编译失败?

此外,我还有其他错误,例如:

  Errors in 'com/google/gwt/validation/client/impl/AbstractGwtSpecificValidator.java'
 Line 102: No source code is available for type javax.validation.ValidationException; did you forget to inherit a required module?
 Line 177: No source code is available for type javax.validation.ConstraintValidator<A,T>; did you forget to inherit a required module?
 Line 153: No source code is available for type javax.validation.groups.Default; did you forget to inherit a required module?
 Line 302: No source code is available for type javax.validation.ConstraintViolation<T>; did you forget to inherit a required module?

这些错误也不会使我的编译失败。为什么?

Edit1: 忘记添加了。

我很想猜测当错误出在从入口点可直接到达的地方时编译失败,而当该代码不可到达时编译正常。 但是,我有带注释的代码的反例。 我有可以从入口点访问的代码,并且有其源代码不可用的注释,但编译成功(尽管这是迄今为止我能找到的唯一例外)。

你的分析很好

GWT 将扫描整个类路径,忽略不在源路径和 "rebasing" super-sources 中的所有内容。在那次扫描期间,它会发出您看到的那种错误,但只有当代码到达缺失的源(从入口点)时,错误才会变得致命。注释也不例外,但代码永远不会真正将它们作为元数据使用(除非您实现 @interface,Java 允许)。但是,生成器可以使用注释,在这种情况下,它们 可以 使构建失败。

请注意,如果您使用 -failOnError(或 -strict,这是一个别名),那么所有错误都是致命的。你的目标应该是在 IMO 上打开它。