Компилятор 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: забыл добавить.

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

1 ответ

Решение

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

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

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

Другие вопросы по тегам