【问题标题】:Some subtlety of GWT compilation - "gwt module may need to be (re)compiled."GWT 编译的一些微妙之处 - “gwt 模块可能需要(重新)编译”。
【发布时间】:2015-07-23 00:39:16
【问题描述】:

我正在将应用程序部署到 GAE。我在 Eclipse 中设置了一个项目,包含三个单独的 GWT 模块,每个模块都有自己的 HTML 页面、入口点等。它们共享大量代码。

当我将应用程序部署到 appengine 时,其中两个模块工作正常。我可以完美地访问他们的 HTML 页面。第三个给我“gwt模块'xyz'可能需要(重新)编译”的错误。我尝试了两次重新编译和重新部署,但无济于事,并且对前进没有任何想法。

关于这个问题的其他线程指向 gwt.codeserver 参数,事实上,如果我添加该参数,坏模块运行......但它似乎在开发模式下运行!如果这是真的,我有点害怕,因为我不想将开发模式代码提供给任何人。

欢迎提出任何建议 - 我的工作基本上完全搁置在这个问题上。

【问题讨论】:

    标签: gwt


    【解决方案1】:

    我找到了自己的答案:在我的情况下,错误不是由缺少 gwt.codesvr 参数引起的(就像我在网上找到的所有其他情况一样)。相反,我在模块定义 gwt.xml 文件中添加的模块重命名属性导致了混淆。我会重新叙述整个故事,以帮助其他人了解更多。

    1. 我创建了一个新模块和一个新的 HTML 页面。
    2. 模块的名称是 com.reallylong.and.unwieldy,我的 HTML 页面从 com.reallylong.and.unwieldy/com.reallylong.and.unwieldy 中提取了 javascript。 nocache.js
    3. 后来,我变聪明了,用 rename-to 属性重命名 com.reallylong.and.unwieldy 改为“短”,不改变我的 HTML 代码。 我忘了。

    这几天都没有影响到我,因为我猜 eclipse 足够聪明,可以重新编译这两个文件,或者其他什么。谁知道。我怀疑 gwt.codesvr 参数实际上是在启用这种模糊行为,从开发模式而不是从 js 文件加载代码。

    最终,修复很简单:我更改了我的 HTML 文件,以便从 short/short.nocache.js 中提取 js。 它奏效了! 哇哦!

    【讨论】:

      【解决方案2】:

      将这些行添加到 XXX.gwt.xml 文件对我有用:(GWT 版本 2.5.1)

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

      【讨论】:

      • 也为我工作。我使用了 GWT 2.7.0,没有这个导出的战争(使用正确编译的 GWT)只能在 IE 中工作。有了它,它也适用于 Chrome 和 Firefox。
      【解决方案3】:

      这是引发此消息的代码。

      function B() {
          var b = false;
          try {
          var c = Window.location.search;
          return (c.indexOf("gwt.hosted=") != -1 
              || (c.indexOf("gwt.codesvr=") != -1
              || Window.external && Window.external.gwtOnLoad)) 
              && c.indexOf("gwt.hybrid") == -1
          } catch (a) {}
          B = function () {
          return b
          };
          return b
      }
      // and later, if B() returns false, show recompile error
      if (!B()) {
          try {
          alert(Pb);
          return;
          }
        ...
      }
      

      因此,为了防止编译器消息

      • 网址中没有 gwt.hybrid
      • 并且没有 gwt.hosted=
      • 或 get.codesvr=
      • 或 Window.external.getOnLoad 方法

      话虽如此,当我没有这个问题时,这段代码没有编译到 *.nocache.js 文件中,所以这才是真正的 bugaboo 所在。

      【讨论】:

        【解决方案4】:

        我分两步解决了:

        1. 在eclipse中点击红色图标“GWT compile project”

        2. 在eclipse右键->作为Maven包运行

        【讨论】:

        • 没有为我做任何事情。 ://
        猜你喜欢
        • 1970-01-01
        • 2013-08-01
        • 2013-07-04
        • 2015-06-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多