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



我正在努力了解更多关于GWT编译工作原理的信息。

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

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

我说的是GWT2.7和GWT2.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?

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

第1版:忘记添加

我很想猜测,当错误位于从入口点直接可访问的内容中时,编译会失败,而当代码不可访问时,编译是可以的。然而,我有一个带有注释的代码的反例。我有可以从入口点访问的代码,也有源代码不可用的注释,但编译成功了(尽管这是迄今为止我能找到的唯一例外)。

您的分析很好。

GWT将扫描整个类路径,忽略所有不在源路径中的内容,并对超级源进行"重定基础"。在扫描过程中,它会发出您看到的那种错误,但只有当代码到达丢失的源(从入口点)时,错误才会变得致命。注释也不例外,但代码永远不会真正将它们作为元数据来访问(除非您实现了Java允许的@interface)。但是生成器可以使用注释,在这种情况下,它们可能导致构建失败。

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

相关内容

最新更新