GWT编译器:什么时候编译错误是致命的?
问题描述:
我想了解更多关于GWT编译如何工作。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?
这些错误也没有辜负我的编译。为什么?
编辑1:忘了补充。
我很想知道,如果错误是从某个入口点直接到达的东西,编译失败,并且该代码无法访问时编译正常。 但是,我有带注释的代码的反例。 我有从入口点到达的代码,并且有注释的源代码不可用,但编译成功(尽管这是迄今唯一可以找到的异常)。
答
你的分析很好。
GWT将扫描整个类路径,忽略不在源路径中的所有内容以及“重新绑定”超级源。在扫描过程中,它会发出你所看到的那种错误,但是只有当代码到达缺少的源(从入口点)时,错误才会变成致命的。注释也不例外,但代码将永远不会实际到达它们作为他们的正义元数据(除非您实现了允许的@interface
)。发电机虽然可以使用注解,但在这种情况下,他们可以通过失败。
请注意,如果您使用-failOnError
(或-strict
,这是一个别名),则所有错误都是致命的。你应该瞄准把这个变成IMO。