1. GWT (Google Web Toolkit, произноситься: /’gwit/). На момент написания поста текущая версия – 2.0.3. Загрузить можно с официальной страницы GWT – http://code.google.com/intl/ru/webtoolkit/download.html.
Вкратце механизм работы GWT можно описать так. Исходный код пишется на Java, затем он транслируется в JavaScript, в результате получаются несколько версий программ для разных браузеров (Firefox, IE, Safari, Google Chrome, Opera 9.0). Полученный JavaScript код неплохо оптимизирован – название переменных и методов сокращенны, убраны комментарии и лишние пробелы. В итоге получается его естественная обфускация. (Пример кусочка полученного кода: function Y7(a){W7();LE(a);a.Vb=NOc;return a}
).
После выхода версии GWT 2.0 появилась возможность разбивать полученный JavaScript код (runAsync) на отдельные файлы, которые затем загружаются асинхронно по мере надобности. Так уменьшается размер первоначального скрипта и как следствие время загрузки и запуска приложения.
Подробное описание есть на официальном сайте GWT.
2. Maven. Это инструмент для автоматической сборки проектов. Maven постоянно сравнивают с ant-ом. В чем заключаются основные отличия между этими двумя системами есть вопрос философский. С практической точки зрения maven по сравнению с ant’ом дает более удобный способ подключения сторонних библиотек. Достаточно добавить в pom.xml информацию об используемой библиотеке и в том случае, если она есть в главном репозитории, то будет без дополнительных усилий скачена, установлена и добавлена в пути для компиляции.
Для ленивых во многих IDE существует возможность поиска необходимых библиотек. Например, как это делается в NetBeans:
- Выбираем maven проект
- Открываем пункт Library, затем открываем контекстное меню .
- Выбираем пункт “Add Dependency…“.
- В отображенном диалоге можем указать в поле Query название библиотеки или просто название класса (Например “c3p0” или “StringUtils”).
- Просматриваем и выбираем из списка необходимую библиотеку, выбираем версию.
Таким образом отпадает необходимость искать в гугле сайт этой библиотеки, искать на ней раздел для скачивания, распаковывать архив, вытаскивать из него jar-файлы, подключать и прописывать их в ant‘овском build.xml.
Для совсем ленивых можно добавить библиотеку прямо при редактировании исходного кода. Например, если в тексте программы написать название класса то по нажатию [Alt + Enter] отобразится подсказка ” Search Dependency at Maven Repository …”, а затем диалог для поиска.
Можно провести приблизительную аналогию с линуксоидным миром. Maven это как apt или yum, а ant это как rpm или build. В первом случае вам достаточно вбить apt-get install название-библиотеки и система сама найдет, скачает и установит необходимый файл. Справедливости ради следует упомянуть проект ivy – расширение к ant‘у, предназначенное для управления зависимостями (project dependency).
3. Ext GWT , он же GXT.
Сначала появился Ext JS – знаменитый фреймворк на JavaScript, который обладает богатым набором виджетов для создания пользовательского интерфейса. Это чисто JavaScript-овое решение (также как например jQuery), то есть не требуется никакой компиляции из Java-классов в JavaScript как в GWT.
Во время его развития и популяризации компания Google анонсировала выход своего GWT, о котором было сказано выше. После того как GWT стал набирать популярность начали выходить различные сторонние библиотеки связующие GWT с другими технологиями. Одной из таких библиотек была GWT-Ext (не путать с ExtGWT !) – по сути просто обертка над Ext JS для связки с GWT. По началу она была достаточно востребована, так как позволяла использовать всю мощь GWT и силу интерфейсных решений Ext JS одновременно. С эволюционной точки зрения эта библиотека (GWT-Ext) являлась промежуточным звеном. На данный момент развитие проекта закрыто и его создатели рекомендуют использовать другой продукт – SmartGWT.
На мой взгляд, одной из причин закрытия проекта был выпуск непосредственно самими создателями Ext JS библиотеки Ext GWT (он же GXT). Она была реализована полностью на чистом GWT и не является прослойкой между javascript-овыми файлами Ext JS и GWT. Из моего личного опыта, GXT (Ext GWT) использовать намного удобней и приятней чем GWT-Ext, т.к. он работает быстрее и более предсказуем в поведении. Проект постоянно развиваются, выходят новые версии, исправляются ошибки, появляются новые виджеты. На данный момент существует версия Ext GWT SDK 2.1.1 которая совместима с GWT 2.0.
Инструкцию по установки и работе в связке с maven‘ом можно прочитать здесь: http://www.extjs.com/learn/Tutorial:GWT_GXT_and_Maven_howto . Инструкция написано неплохо – подробно, четко и последовательно. Требуется только соблюдать очередность действий и быть аккуратным.
Если Вы работаете в NetBeans’е, то для запуска проекта под встроенным Jetty-сервером в девелоперском режиме необходимо запустить задачу mvn gwt:run. Для этого выбираем проект (Ctrl+1) , вызываем контекстное меню (Shift+F10), затем Custom->Goals… В поле “Goals” нужно указать gwt:run.
Можно запустить в режиме отладки (дебага) – mvn gwt:debug. Программа будет в состояние ожидания (suspend) до подключения дебагара. В NetBeans для запуска необходимо выбрать меню Debug -> Attach Debuger…
В целом связка maven + gwt + gxt образует неплохой каркас для работы над проектами в котором требуется “веб-два-нольный” и богатый пользовательский интерфейс.