В принципе, вы все правильно поняли и в основном сами ответили на вопрос.
В Vaadin компоненты пользовательского интерфейса состоят из двух частей:
- Серверный "компонент", скомпилированный с использованием JDK
- Клиентский "виджет", скомпилированный с использованием GWT
Эти части взаимодействуют друг с другом по HTTP и автоматически синхронизируют свое состояние по мере необходимости. Серверная часть поддерживает состояние компонента пользовательского интерфейса, и клиентский виджет отображает это состояние.
Разработчики приложений обычно используют только компоненты на стороне сервера для создания приложения, и им на самом деле не нужно заботиться о том, как работает сторона на стороне клиента.
Как правило, новые компоненты для Vaadin могут быть разработаны двумя способами:
- Составление существующих компонентов
- Создание новых виджетов с GWT / JavaScript (+ другие технологии на стороне клиента)
Первый метод здесь использует существующие классы и не нуждается в перекомпиляции виджетов с GWT. Компилируется только код приложения (с JDK-компилятором). Однако во втором сценарии классы на стороне клиента изменяются и требуют перекомпиляции. Это когда GWT-компилятор необходим.
Из-за довольно монолитной природы JavaScript, скомпилированного GWT (независимо от новых функций разделения кода в GWT, пространство имен является глобальным), Ваадин использует концепцию набора виджетов . Это модуль GWT, который содержит все виджеты, необходимые в приложении. Это означает, что для добавления новых (клиентских) виджетов в приложение необходима перекомпиляция GWT. Рекомендуется также перекомпилировать набор виджетов при удалении виджетов для оптимизации размера набора виджетов.
Сам этап компиляции GWT не представляет собой ничего особенного. Однако сам Vaadin содержит множество дополнений, помощников и обходных путей к классам GWT, которые применяются и используются виджетами.
Все это хорошо видно при использовании надстроек Vaadin (см. http://vaadin.com/directory). Даже надстройки - это просто jar-файлы, если они содержат новый код виджета на стороне клиента, необходима компиляция набора виджетов с использованием GWT , когда они добавляются в проект.