Активация GWT Dev Mode в приложении GWT, созданном с использованием Maven
TL; DR: для отладки на стороне клиента я запустил gwt:run
goal запустил приложение в Chrome, а после входа в систему оно сгенерировало исключение ниже, а режим разработки GWT не запустился (ни одна из точек останова на стороне клиента не сработала)
javax.el.ELException: /pages/common/gwt/commonLayoutGWT.xhtml: setAttribute: Non-serializable attribute with name sessionBean
at com.sun.faces.facelets.compiler.TextInstruction.write(TextInstruction.java:90)
at com.sun.faces.facelets.compiler.UIInstructions.encodeBegin(UIInstructions.java:82)
at com.sun.faces.facelets.compiler.UILeaf.encodeAll(UILeaf.java:183)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859)
at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:456)
...
Что я должен сделать, или что я должен проверить, чтобы мой режим разработки GWT работал должным образом?
Немного предыстории: ранее наша команда использовала несколько скриптов ant для компиляции, отладки (серверный и клиентский код), запуска и развертывания нашего основного приложения. Это работало без проблем, хотя процесс был действительно громоздким и ручным. Мы решили сделать его приложением Maven несколько месяцев назад, и мы смогли успешно выполнить все действия / цели после использования Maven. Компиляция, запуск и развертывание приложения стали быстрыми и удобными, что было нашей целью.
Но до сих пор мы не замечали, что в какой-то момент процесса отладка на стороне клиента перестала работать. Только после того, как мы получили сообщения об ошибках и начали пытаться их отлаживать, мы заметили проблему. Так что теперь мне нужно установить GWT Dev Mode, и я не смог сделать это независимо от того, что я пробовал.
Я работаю с:
- SmartGWT 4.0
- JDK 1.8.0_121
- GWT Eclipse Plugin 2.8.0
- GlassFish 4.1
- Maven 3.3
Я попытался следовать некоторым инструкциям из gwtproject, используя компоновщик по умолчанию
xsiframe
вgwt.xml
файл.Но когда я выполнил
gwt:compile
цель, эта ошибка обнаружилась:[INFO] Linking into D:\Development\Repos\Git\Java\MyApp\myApp\target\classes\..\..\..\myApp\WebContent\pages\module\gwt\com.myapp.client.gwt.MyAppClient [INFO] Invoking Linker Cross-Site-Iframe [INFO] [ERROR] The Cross-Site-Iframe linker does not support <script> tags in the gwt.xml files, but the gwt.xml file (or the gwt.xml files which it includes) contains the following script tags:
Чтобы решить эту проблему, я использовал одно из рекомендуемых решений по самой ошибке: " ... добавьте это свойство к
gwt.xml
файл:<set-configuration-property name='xsiframe.failIfScriptTag' value='FALSE'/>
"Я управлял
gwt:compile
снова, и все закончилось успешно
1 ответ
Я предлагаю запустить ваш серверный код на отдельном сервере (может быть mvn jetty:run
), и запускайте GWT Dev Mode только для клиентского кода (используйте <noserver>true</noserver>
).
Это решает так много проблем (с запуском веб-приложений на встроенном сервере DevMode), что это рекомендуемая установка в настоящее время.