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

时间:2017-02-13 16:45:26

标签: java gwt gwt-2.7 gwt-2.8

我正在尝试更多地了解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工作得很好(该类是注册一些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:忘了添加。

我很想猜测,如果错误是从入口点可以直接访问的,那么编译就会失败,并且当该代码无法访问时编译就可以了。 但是,我有带注释的代码的反例。 我有从入口点可以访问的代码,并且有注释,其源代码不可用,但编译成功(尽管这是我到目前为止唯一的例外)。

1 个答案:

答案 0 :(得分:4)

您的分析很好。

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

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