GWT模块可能需要(重新)编译REDUX

时间:2011-04-19 15:50:38

标签: gwt maven

在编译模式下运行时,我得到这个可怕的GWT模块'mymodule'可能需要(重新)编译对话框消息。

我已经编译了其他人建议在编译模式下运行的GWT给出此错误消息时要尝试的事项的列表。我打开了maven创建的WAR文件,所有文件都在正确的位置。我在另一个没有出现此错误的GWT maven项目中确认了这一点。但是,以下建议都没有纠正这个问题。我也没有能够确定这两个项目之间缺少什么区别 - 一个工作的项目和我的项目将不会以编译模式运行。

我还能尝试什么?

8 个答案:

答案 0 :(得分:53)

您是否使用src/main/webapp作为“war文件夹”启动了DevMode?换句话说,*.nocache.js中有src/main/webapp吗?在这种情况下,该文件将覆盖由gwt-maven-plugin调用的GWT编译器生成的文件。

由DevMode生成的*.nocache.js(当没有人存在时,由先前的GWT编译生成)仅包含启动DevMode所需的位,否则将因上述错误而失败。

答案 1 :(得分:16)

<MODULE_NAME>.nocache.js中查找名为src/main/webapp/<MODULE_NAME>的文件并删除/重命名。

然后做你的mvn包,所有'应该'没问题。

在Eclipse中运行Dev模式时可能会发生此问题。 Eclipse将生成nocache.js文件并将其放在src/main/webapp目录下。

然后当您运行mvn pacakge时,maven插件会创建部署nocache.js并将其放在正确的位置,但是当它将文件打包成战争时,它会过度保护它的部署{{ 1}}用一个Eclipse创建 - 糟糕!

答案 2 :(得分:5)

如果在应用程序中有另一个页面的静态链接(即myModule2.html),我在DevMode中发现了同样的问题。因为它缺少?gwt.codesvr = 127.0.0.1:9997 字符串,所以它被解释为静态(已编译的)GWT应用程序,它不是,抛出你提到的错误代码。

enter image description here

当然解决方案不是使用硬编码的文字链接,而是让GWT为您制作。希望有所帮助。

<强>更新

这是在标准GWT * .nocache.js文件中抛出此错误的代码。

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方法

因此,在弹出窗口的情况下,某些服务器代码重定向了DevMode会话URL,但没有添加“codesvr =”参数,因此显示了警告。

答案 3 :(得分:2)

你编译了源代码吗?这是一个令人惊讶的非显而易见的步骤。如果您正在使用eclipse,则可以通过单击红色工具箱图标进行编译。

答案 4 :(得分:2)

除了通常的mvn gwt:compile之外,您还必须运行mvn clean install package,因为GWT编译不是maven-package-phase的一部分。 这解决了恼人的Javascript-(重新)编译错误。

答案 5 :(得分:0)

我有类似的问题。在我的GWT项目上执行mvn clean install给我一个war文件,在tomcat中部署导致相同的“GWT模块'mymodule'可能需要(重新)编译”对话框消息。我也在这里做了所有提到的东西而没有任何成功。

mvn clean install -DskipTests=true为我完成了这项工作 或
在不调用生成的测试URL的情况下执行mvn clean install(例如:http://<localIp>:53701/mymoduleJUnit.JUnit/junit-standards.html?gwt.codesvr=<localIp>:53697

测试阶段显然通过一些花哨的开发模式url覆盖了我最初创建的*.nocache.js,最终给我打错了*.nocache.js

答案 6 :(得分:0)

我的开发模式已正确配置,上面的解决方案无效。以下确实解决了这个问题。

多个步骤:

  1. 更新项目属性 - &gt;使用Deploy GWT maven project with eclipse deploys webapp directory instead of target/project directory
  2. 部署程序集
  3. mvn clean package
  4. mvn gwt:compile
  5. 在eclipse中,点击'GWT Compile Project' - &gt; Advacned - &gt;删除'-war src / main / webapp'参数并点击编译。
  6. 输出应该是这样的 - 链接到target / project-1.0-SNAPSHOT / ModuleName

    ......部署工作正常。

答案 7 :(得分:0)

这也适用于所有其他有效的答案:有时您可能需要在执行其中一个后执行硬/缓存浏览器刷新(ctrl + F5)。