GWT编译的一些微妙之处 - “gwt模块可能需要(重新)编译。”

时间:2010-09-10 20:21:35

标签: gwt

我正在向GAE部署应用程序。我在Eclipse中有一个项目设置,有三个独立的GWT模块,每个模块都有自己的HTML页面,入口点等。它们共享很多代码。

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

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

任何建议都会受到欢迎 - 我的工作基本上完全停滞在这个问题上。

4 个答案:

答案 0 :(得分:8)

我找到了自己的答案:在我的情况下,错误不是由于缺少 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 to“short”,不更改我的HTML代码。 我忘了。
  4. 这几天没有影响我,因为我觉得eclipse足够聪明,可以重新编译这两个文件。谁知道。我怀疑 gwt.codesvr 参数实际上是启用了这种模糊行为,从开发模式而不是从js文件加载代码。

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

答案 1 :(得分: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" />

答案 2 :(得分:1)

以下是抛出此消息的代码。

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
  • AND DO没有gwt.hosted =
  • 或get.codesvr =
  • 或一个Window.external.getOnLoad方法

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

答案 3 :(得分:0)

我分两步解决了这个问题:

    在eclipse中
  1. 点击红色图标“GWT编译项目”

  2. 在eclipse右侧clik中 - &gt;作为Maven包运行