2017-02-13 7 views
1

Я пытаюсь понять, как работает компиляция 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 работает просто отлично (класс является то, что регистрирует джин привязок , которые также работают).

Почему 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: забыл добавить.

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

ответ

3

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^