Компилятор 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?

Эти ошибки также не вызывают сбоев при компиляции. Почему?

Edit1: забыл добавить.

У меня возникает соблазн предположить, что компиляция терпит неудачу, когда ошибка находится в чем-то, достижимом непосредственно из точки входа, и что компиляция проходит нормально, когда этот код недоступен. Однако у меня есть контрпример кода с аннотациями. У меня есть код, доступный из точки входа, и есть аннотации, исходный код которых недоступен, и тем не менее компиляция проходит успешно (хотя это единственное исключение, которое я пока смог найти).


person Andrei    schedule 13.02.2017    source источник


Ответы (1)


Ваш анализ хорош.

GWT будет сканировать весь путь к классам, игнорируя все, что не входит в исходный путь, и «перебазируя» супер-источники. Во время этого сканирования он выдает ошибку, которую вы видели, но только когда код достигнет недостающих источников (из точек входа), ошибка станет фатальной. Аннотации не являются исключением, но код никогда не доберется до них как к своим метаданным (если только вы не реализуете @interface, что позволяет Java). Однако генераторы могут использовать аннотации, и в этом случае они могут завершить сборку неудачно.

Обратите внимание, что если вы используете -failOnError (или -strict, что является псевдонимом), то все ошибки являются фатальными. Вы должны стремиться включить это IMO.

person Thomas Broyer    schedule 13.02.2017