Как отладить приложение GWT, работающее на OSGi?
Я разрабатываю веб-интерфейс с использованием GWT. Работая только с виджетами, я мог отлаживать из Eclipse, используя расширение Firefox, но теперь, когда я интегрирую пользовательский интерфейс с другими пакетами OSGi, я не могу использовать это решение.
Для развертывания приложения GWT я создаю.war и конвертирую его в комплект OSGi с помощью BND. Затем я запускаю контейнер OSGi со всеми пакетами, используя Pax Runner и Pax Web, и приложение работает правильно, но когда что-то не получается в сгенерированном коде JavaScript, у меня нет приличной ошибки вывода или средства отладки.
Есть ли способ запустить приложение GWT в "режиме отладки" из OSGi?
Любая другая идея, которая может помочь в этом сценарии?
Обновление: возможно ли создать экземпляр com.google.gwt.dev.DevMode
или его часть с разъемом браузера от Activator
?
2 ответа
Наконец-то мне удалось запустить режим разработки с использованием OSGi, GWT и опционально затмения. Решение было на -noserver
флаг режима разработки GWT, он не знает об изменениях в коде во время работы приложения, но его можно использовать для отладки скомпилированного кода и для получения трассировок исключений.
Мне также удалось запустить оболочку разработки без Eclipse, но если вы не заинтересованы в этом решении, вы можете сразу перейти к разделу интеграции Eclipse.
Без Eclipse (только исключения, без отладки)
Вам необходимо знать следующую информацию:
- Где у вас есть ваш источник (
$SRC
) - Где у вас есть ваши библиотеки GWT (
$GWT_PATH
), специальноgwt-user.jar
а такжеgwt-dev.jar
, - (Опционально) порт, с которого ваш HTTP сервер OSGi обслуживает приложение (
$PORT
). - URL запуска вашего приложения (
$URL
) - Пакет, содержащий файл.gwt.xml для вашего приложения (
$PACKAGE
).
Тогда вам нужно запустить:
java -cp $SRC:$GWT_PATH/gwt-user.jar:$GWT_PATH/gwt-dev.jar \
com.google.gwt.dev.DevMode -noserver -port $PORT \
-startupUrl $URL $PACKAGE
Например:
java -cp src/:lib/gwt-2.0.3/gwt-user.jar:lib/gwt-2.0.3/gwt-dev.jar \
com.google.gwt.dev.DevMode -noserver -port 8080 \
-startupUrl httplocalgui.html es.warp.samples.httplocalgui
И, наконец, вам нужно только развернуть ваше приложение как обычно, в моем примере я делаю это с pax-runner и pax-web, используя порт по умолчанию 8080.
С затмением
- Откройте конфигурацию отладки для вашего проекта
- Перейдите на вкладку "Сервер" и снимите флажок "Запустить встроенный сервер"
- Перейдите на вкладку "Атрибуты" и добавьте
-port 8080
" (если 8080 - это порт, используемый вашим веб-контейнером.) Я думаю, что этот аргумент без встроенного сервера используется только для создания URL-адреса, который генерирует режим разработки для вызова браузера (или что elipse использует для создания URL-адреса). Вы можете скопировать и вставить в адресную строку вашего браузера). - Разверните ваше приложение.
- Доступ к нему из браузера с установленным расширением GWT (и не забудьте добавить
?gwt.codesvr=127.0.0.1:9997
)
У меня была та же самая проблема в последнее время, и, к сожалению, я не нашел хорошего решения.
В конце концов я создал ложные реализации всех сервисов GWT, которые я использую в своем коде на стороне клиента. Когда мне нужно отладить код на стороне клиента, я просто переключаюсь на эти сервисы вместо реальных сервисов, использующих OSGi. Затем в Eclipse я могу запустить приложение GWT в режиме отладки. Это далеко от совершенства и требует некоторой работы с макетами, но это работает для меня (по крайней мере, сейчас).