Как отладить приложение 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.

С затмением

  1. Откройте конфигурацию отладки для вашего проекта
  2. Перейдите на вкладку "Сервер" и снимите флажок "Запустить встроенный сервер"
  3. Перейдите на вкладку "Атрибуты" и добавьте-port 8080" (если 8080 - это порт, используемый вашим веб-контейнером.) Я думаю, что этот аргумент без встроенного сервера используется только для создания URL-адреса, который генерирует режим разработки для вызова браузера (или что elipse использует для создания URL-адреса). Вы можете скопировать и вставить в адресную строку вашего браузера).
  4. Разверните ваше приложение.
  5. Доступ к нему из браузера с установленным расширением GWT (и не забудьте добавить ?gwt.codesvr=127.0.0.1:9997)

У меня была та же самая проблема в последнее время, и, к сожалению, я не нашел хорошего решения.

В конце концов я создал ложные реализации всех сервисов GWT, которые я использую в своем коде на стороне клиента. Когда мне нужно отладить код на стороне клиента, я просто переключаюсь на эти сервисы вместо реальных сервисов, использующих OSGi. Затем в Eclipse я могу запустить приложение GWT в режиме отладки. Это далеко от совершенства и требует некоторой работы с макетами, но это работает для меня (по крайней мере, сейчас).

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