Отладка GWT приложений на внешнем контейнере

Background

В предыдущем посте было упомянуто о необходимости запускать GWT приложение в Hosted Mode, используя при этом dmServer, тут же я бы хотел поделиться шагами, через которые мне пришлось пройти, чтобы реализовать эту возможность.

Итак как это было…

Прочитав FAQ тут, как говорится с “пол пинка” не завелось к сожалению( Но на этом мое намерение отлаживать мое приложение в dmServer не испарилось. Что я сделал – изменил настройки ланчера для запуска приложения в Hosted Mode: изменил параметр для открытия URL -startupUrl и добавил парметр, говорящий ланчеру не запускать встроенный сервлет контейнер (для GWT 1.7 – Jetty). Содержимое конфигурационного файла приведено ниже.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
	<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
		<listEntry value="/stock-watcher" />
	</listAttribute>
	<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
		<listEntry value="4" />
	</listAttribute>
	<booleanAttribute key="org.eclipse.debug.core.appendEnvironmentVariables"
		value="true" />
	<listAttribute key="org.eclipse.jdt.launching.CLASSPATH">
		<listEntry
			value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry containerPath=&quot;org.eclipse.jdt.launching.JRE_CONTAINER&quot; javaProject=&quot;stock-watcher&quot; path=&quot;1&quot; type=&quot;4&quot;/&gt;&#13;&#10;" />
		<listEntry
			value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/stock-watcher/src/main/java&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;" />
		<listEntry
			value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry id=&quot;org.eclipse.jdt.launching.classpathentry.defaultClasspath&quot;&gt;&#13;&#10;&lt;memento exportedEntriesOnly=&quot;false&quot; project=&quot;stock-watcher&quot;/&gt;&#13;&#10;&lt;/runtimeClasspathEntry&gt;&#13;&#10;" />
	</listAttribute>
	<stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER"
		value="org.maven.ide.eclipse.launchconfig.classpathProvider" />
	<booleanAttribute key="org.eclipse.jdt.launching.DEFAULT_CLASSPATH"
		value="false" />
	<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE"
		value="com.google.gwt.dev.HostedMode" />
	<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS"
		value="-startupUrl http://localhost:8080/stock-watcher/StockWatcher.html&#13;&#10;name.webdizz.gwt.stock.watcher.StockWatcher&#13;&#10;-war src/main/webapp&#13;&#10;-noserver" />
	<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR"
		value="stock-watcher" />
	<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER"
		value="org.maven.ide.eclipse.launchconfig.sourcepathProvider" />
	<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS"
		value="-Xmx256M" />
</launchConfiguration>

На этом мои действия, исходя из смысла приведенной выше статьи, должны были увенчаться успехом, но это было не совсем так. Дальнейшие “танцы с бубном” показали, что так как я использую Maven для сборки проекта и, в частности, gwt-maven-plugin для компиляции GWT специфичных артифактов, проблема скрывалась за несогласованными действиями Google Eclipse plugin и Maven. Этот момент был устранен настройкой maven-war-plugin в файле pom.xml проекта stock-watcher. Я исключил копирование содержимого директории src/main/webapp/stockwatcher из src/main/webapp/ (директива warSourceExcludes).

46
47
48
49
50
51
52
<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-war-plugin</artifactId>
	<configuration>
		<warSourceExcludes>**/stockwatcher/**</warSourceExcludes>
	</configuration>
</plugin>

`После этого собранный проект с помошью команды

mvn clean install

Результат сборки копируем в pickup директорию dmServer-а и запускаем ланчер в Eclipse. Ставим breakpoint и наслаждаемся…;) правда перед тем как окунуться в дебаг не знаю почему, но необходимо Hosted Browser рефрешить 5 раз и на 6-ой мы попадаем на точку останова)).

Debugging GWT application
Debugging GWT application

One thought on “Отладка GWT приложений на внешнем контейнере

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.