【问题标题】:GWT DevMode Jetty restart doesn't honor server code changesGWT DevMode Jetty 重启不遵守服务器代码更改
【发布时间】:2013-06-04 00:11:37
【问题描述】:

我刚刚下载了 GWT 2.5.1 SDK。我跑了:

./webAppCreator -out /home/myUser/tmp/dummygwt/com.dummygwt.OhHai

它为我创建了一个 GWT 项目。然后我导航到/home/myUser/tmp/dummygwt/ 并运行:

ant -buildfile build.xml 开发模式

然后启动了 GWT 开发模式工具,我点击了Launch Default Browser,它在 Firefox 中打开了我的“OhHai”应用程序。

然后我导航到/home/myUser/tmp/dummygwt/src/com/dummygwt/server/GreetingServiceImpl.java 并打开它进行编辑。我将GreetingServiceImpl#greetServer 方法的返回值更改为以“Bonjourno,”而不是“Hello,”开头。这样,当您输入您的姓名并单击“发送”按钮时,弹出对话框将显示“Bonjourno,...”。 (我只是在玩玩,玩得开心。)

我将更改保存到 GreetingServiceImpl.java,然后(在 GWT 开发模式工具中)导航到 Jetty 选项卡并单击 Restart Server 并收到以下警告:

00:14:25.446 [WARN] 在网络应用程序中找不到服务器类“com.google.gwt.dev.shell.jetty.JDBCUnloader”,但在系统类路径中找到了

00:14:25.446 [WARN] 将类路径条目 'file:/home/myUser/sandbox/dsi/workbench/gwt-sdk/gwt-2.5.1/gwt-dev.jar' 添加到 Web 应用程序类路径中本次会议 更多信息:文件:/home/myUser/sandbox/dsi/workbench/gwt-sdk/gwt-2.5.1/doc/helpInfo/webAppClassPath.html

我刷新了浏览器,输入了一个新名称并点击了“发送”。 我仍然看到“你好,...”而不是“Bonjourno,...”。我做错了什么,或者这是 GWT 开发模式工具的错误?提前致谢!

注意:如果我退出开发模式工具(并关闭浏览器上的选项卡),然后重新启动开发模式,服务器端更改生效.但是 GWT 文档明确指出,要“热部署”服务器端代码,您需要做的就是从该工具重新启动服务器...不要退出它并完全重新启动该工具...

【问题讨论】:

  • 您是否检查过您的浏览器是否安装了 GWT 开发者插件并且 URL 包含参数 gwt.codesrv=...??
  • 感谢 @futuretelelematics (+1) - 是的,浏览器打开的 URL 是 http://127.0.0.1:8888/OhHai.html?gwt.codesvr=127.0.0.1:9997,但是我不确定是否了解 GWT 开发者插件。从来没有提示我安装它,所以我认为它是自动安装的。 (1) 不是这样吗,如果是这样,我该如何安装它? (2) 为什么浏览器插件不存在会阻止 服务器端 代码热部署?谢谢!
  • 嗨!您需要 Mozilla 的 GWT 浏览器插件才能让浏览器向 GWT 码头服务器询问最新代码。您可以在gwt.googlesource.com/gwt-plugins 获取最新的 GWT 浏览器插件如果您使用 Mozilla 以外的其他浏览器更容易转到gwt.google.com/missing-plugin/MissingPlugin.html(点击其他系统的插件
  • 您是否在调试模式下启动了嵌入jetty的GWT eclipse插件? (这是一个愚蠢的问题,但我没有看到其他问题);-)
  • 既然你是命令行的,你编译你改代码了吗?

标签: gwt sdk gwt-dev-mode


【解决方案1】:

名称是简单的调用缓存,对于应用设置,您需要重新加载它。 有很多方法可以重新加载,你只需要拿起一个女巫对你来说更容易。 close/open 是其中之一,您也可以在不退出的情况下从 Web 浏览器中进行清理。

【讨论】:

    【解决方案2】:

    当您运行 GWT DevMode 时,它​​将仅监控客户端 java 类中的更改。

    修改任何客户端命名空间(src/com/dummygwt/client 或 src/com/dummygwt/shared)中的任何类,在浏览器中重新加载页面,您将看到更改。

    尽管如此,当您更改服务器端类时,您必须在重新加载码头服务器之前编译它们。

    使用任何文本编辑器在服务器端修改一个类(即 GreetingServiceImpl.java),然后在另一个终端中运行ant javac,GreetingServiceImpl.class 将被更新,最后按下“重新启动服务器”按钮,您将看到变化。

    如果你在 Eclipse 中编辑你的类,这个过程会简单得多,因为默认情况下 Eclipse 被配置为不断地将 .java 文件编译为 .class,所以重新加载服务器就足够了。

    【讨论】:

      【解决方案3】:

      我很确定您只需要在进行更改后重新编译 GreetingServiceImpl.java(您没有提及在更改后执行此操作)。重新启动服务器不会为您神奇地重新编译所有内容(但通常您的 IDE 会)。

      请注意,热部署与“热编译部署”不同。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-26
        • 2010-11-04
        • 2021-11-21
        相关资源
        最近更新 更多