【问题标题】:Super Dev mode in GWTGWT 中的超级开发模式
【发布时间】:2013-08-22 04:56:53
【问题描述】:

我是 gwt 的新手。我不知道如何启动超级开发模式。我需要一步一步的详细解释。

我尝试通过添加编辑 gwt.xml 文件

<add-linker name="xsiframe"/>
  <set-configuration-property name="devModeRedirectEnabled" value="true"/>
  <set-property name="compiler.useSourceMaps" value="true" />

但我不明白这一点。

【问题讨论】:

    标签: gwt eclipse-plugin gwt-rpc gwt2 gwt-super-dev-mode


    【解决方案1】:

    更新:从 GWT 2.7 开始,DevMode 实际上会默认自动使用 Super Dev Mode,因此您只需像以前一样启动 DevMode,应用程序将自动(重新)编译在页面上(重新)加载。
    一个区别是会生成一个特殊的.nocache.js,因此您必须确保浏览器加载此特定文件;要调试远程服务器(就像之前使用 -noserver 运行的 DevMode 一样),您必须使用如下所述的小书签。

    要在超级开发模式下运行,您必须经过 2 个准备步骤:

    1. 超级开发模式仅适用于 xsiframe 链接器,因此请确保您的 .gwt.xml 中也包含以下行:

      <add-linker name="xsiframe" />
      

      该链接器对于生产使用是安全的(Google 在任何地方都使用它,稍微定制),所以请随时为您的所有项目打开它(它结合了 std 链接器的优点 - 默认链接器 - 和 @ 987654332@ 链接器,没有它们的缺点)。

      注意:链接器将是 2.7 中的默认链接器

      如果您使用 2.6.0 之前的 GWT 版本,您还必须在 .gwt.xml 中启用超级开发模式:

      <set-configuration-property name="devModeRedirectEnabled" value="true" />
      

      否则,如果您打算从不同于 127.0.0.1localhost 的 URL 使用超级开发模式,则必须将主机列入白名单。这是使用正则表达式完成的,例如:

      <set-configuration-property name="devModeUrlWhitelistRegexp" value="http://(mymachinename|192\.168\.5\.151)(:\d+)?/.*" />
      

      https://stackoverflow.com/a/21938574/116472

    2. 编译并将您的应用程序部署到您附近的 Web 服务器(如果您使用特定于超级开发模式的 .gwt.xml 文件,请确保编译该模块:xsiframe 链接器和 devModeRedirectEnabled 属性对于编译步骤!)

      如果您使用 GWT-RPC,请将系统属性 gwt.codeserver.port 设置为您将在其上运行超级开发模式的端口(默认为 9876),以便您的服务器可以直接从超级开发模式下载 RPC 序列化策略。
      如果你在不同的机器上运行它们,你必须在你的所有RemoteServiceServlets 中覆盖getCodeServerPolicyUrl。但请考虑安全隐患,如 in the javadoc

      所述

    完成后,您可以开始超级开发模式会话:

    1. 使用与启动 DevMode 相同的类路径启动 com.google.gwt.dev.codeserver.CodeServer(即 gwt-user.jargwt-dev.jar 和所有客户端依赖项:例如 GXT、GIN+Guice、GWTEventBinder 等),但添加 @ 987654348@;并将模块的名称作为参数传递。

      首先编译你的模块来检查它是否可以被编译;您可以通过传递 -noprecompile 作为参数跳过这一步。

      如果您从未运行过超级开发模式,请转到 http://localhost:9876 并将 开发模式打开开发模式关闭 链接添加到您的书签(将它们拖放到您的书签栏)。

      注意:如果您使用 Maven,您应该可以使用 mvn gwt:run-codeserver(注意:在 2.6.0 之前的插件版本中有一个错误,您实际上必须运行 mvn process-classes gwt:run-codeserver;这已在2.6.1)。

    2. 在浏览器中打开您的应用,然后点击 Dev Mode On 小书签。在打开的弹出窗口中单击编译按钮。它应该刷新页面并从CodeServer 而不是从您的服务器加载 JS。您的浏览器的开发工具还应该加载 SourceMap,以便您可以查看和调试(逐步)您的 Java 代码。

    3. 当您想要测试您对代码所做的更改时,请再次点击 Dev Mode On 小书签。与 DevMode 相反,刷新页面不会使其运行新代码;代码必须首先重新编译,这是在 Dev Mode On 书签后单击 Compile 按钮完成的(注意:您也可以直接为 Compile 按钮保存一次点击,但请注意,它已绑定到您的模块,因此如果您处理多个模块,则需要多个书签。

    4. 完成后,点击 Dev Mode Off 以确保切换回 生产模式,然后关闭 CodeServer 进程(CtrlC 在控制台应该可以工作)。

    官方文档http://www.gwtproject.org/articles/superdevmode.html
    另请参阅http://blog.ltgt.net/how-does-gwts-super-dev-mode-work/,了解有关超级开发模式实际工作原理的更多信息。

    【讨论】:

    • 在 eclipse 或 IntelliJ 中是否有调试支持? (我知道这可能就像问神谕一样)
    • 在步骤 #1 中再次出现警告,我如何保留两个 *.gwt.xml 文件并将它们切换为超级开发模式与使用 Maven 的生产模式?
    • @Thad:这不是“The Maven Way™”,但您可以使用配置文件;有关示例,请参见 github.com/tbroyer/gwt-maven-archetypes/blob/…。或者你可以简单地使用一个属性并从命令行覆盖它的值。
    • @Thad 警告没有实际意义。在 prod 中使用是安全的,现在在 GWT 2.6.0-rc4 及更高版本中默认启用。
    • @ThomasBroyer 如果我遵循了所有这些步骤,但我得到浏览器获取错误,它找不到 *.nocache.js(我没有更改任何东西,它在托管上完美运行模式)
    【解决方案2】:

    我为使用超级开发模式Here 的 hello world 项目调试编写了一个简单的分步指南。

    阅读带有屏幕截图的分步指南后,您不能错过它。

    此外,您还可以阅读该技术 -

    GWT SuperDevMode - Ray Cromwell PostGWT Dev Guide

    SourceMaps - GWT and SourcemapsHTML5 Sourcemaps

    【讨论】:

    • 当代码在断点处停止时,我只能看javascript。是否可以调试java代码(在java变量被翻译成javascript之前添加一个watch)?
    【解决方案3】:

    按照这些步骤,你一定会找到解决办法的。

    1. 下载 GWT 2.5 RC2,并把它放在某个地方...我把它放在我的 eclipse/plugins 目录中。 link

    2. 在 Eclipse 中,将 GWT 2.5 添加到 Project -&gt; Properties -&gt; Google -&gt; Web Toolkit -&gt; Configure SDKs 屏幕,然后选择您在上一步中添加到目录中的 2.5 版本。

    3. 在 Eclipse 中右键单击项目,转到其运行配置窗口,然后创建一个新的“Java 应用程序”,将其命名为“GWT Super Dev Mode”。

    4. 在“运行配置”窗口中,执行以下操作:

      1. 根据你的项目名称设置项目,在主类中输入com.google.gwt.dev.codeserver.CodeServer

      2. Classpath tab上,点击user Entries,然后点击Add External JARs,导航到GWT 2.5目录,找到gwt-codeserver.jar,点击“打开"(和其他外部库)。

      3. 在“参数”选项卡中,将-src src/ *SOURCE PATH OF YOUR PROJECT* 添加到程序参数,并将可选的-Xmx1024m 添加到 VM 参数。

      4. 单击应用,然后继续运行项目。

    5. 之后你会得到一个类似的 URL,localhost:9876/

    6. 转到该 URL,并为 Dev Mode ONDev MOde Off 添加书签,然后运行您的代码,删除 URL 中的后缀 gwt.codesvr=127.00.1:9997。现在点击Dev Mode ON...

    希望你能得到解决方案...

    【讨论】:

    • 为什么我得到“工作目录不存在”?
    • 我知道用法:必须提供至少一个模块
    • 我解决了以下错误:“用法:必须提供至少一个模块” 通过向具有完全限定包的 CodeServer 提供参数。例如com.somepackage.testgwt.TestGWT 其中 TestGWT 是对我的 TestGWT.gwt.xml 文件的引用。
    【解决方案4】:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多