【问题标题】:GWT Compiler : when is a compilation error fatal?GWT 编译器:编译错误何时是致命的?
【发布时间】:2017-02-13 16:45:26
【问题描述】:

我正在尝试更多地了解 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:忘记添加了。

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

【问题讨论】:

    标签: java gwt gwt-2.7 gwt-2.8


    【解决方案1】:

    你的分析不错。

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

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

    【讨论】:

      猜你喜欢
      • 2012-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多