GWT module may need to be (re)compiled REDUX

When running in compiled mode I get this dreaded GWT Module 'mymodule' may need to be (re)compiled dialog message.

I've compiled a list of the things that others have suggested to try when given this error message by GWT running in compiled mode. I've opened the WAR file created by maven and all the files are in the right place. I confirmed this against another GWT maven project that does not get this error. However, none of the below suggestions have corrected the problem. Nor have I been able to identify what difference is missing between these two projects -- the one that works and mine that will not run in compiled mode.

  • does name in html launch page match the module?
  • Lots of lame suggestions to add the gwt.codesrv query string param onto the URL. However, the point is to run without in compiled mode. Obviously, I don't want to run in hosted mode. That works. I'm trying to run in compiled mode in Tomcat.
  • Clearing browser cache? -- nope. didn't help
  • I have not over-riden the "user.agent" property in mymodule.gwt.xml
  • add to the maven-clean-plugin configuration your eclipse output directory: src/main/webapp/WEB-INF/classes

What else can I try?


Have you started the DevMode using your src/main/webapp as the "war folder"? or in other words, is there a *.nocache.js in your src/main/webapp? In that case, this file will overwrite the one produced by the GWT compiler as called by the gwt-maven-plugin.

The *.nocache.js generated by the DevMode (when no one exists, generated by a previous GWT compilation) contains only the necessary bits to launch the DevMode, and will otherwise fail with the above-mentioned error.


Look for a file called <MODULE_NAME>.nocache.js in src/main/webapp/<MODULE_NAME> and delete/rename it.

Then do your mvn package and all 'should' be fine.

This problem can occurs when you run Dev mode in Eclipse. Eclipse will generate the nocache.js file and put it under the src/main/webapp directory.

Then when you run mvn pacakge, the maven plugin create the deployment nocache.js and puts it in the right place, but then when it packages files into a war it then over-rights it's deployment nocache.js with the one Eclipse created - bummer!


I found the same issue in DevMode if there was a static link to another page in the application (i.e. myModule2.html). Because it lacked the ?gwt.codesvr=127.0.0.1:9997 string, it was interpreted as a static (already compiled) GWT app, which it was not, throwing the error code you mentioned.

enter image description here

Of course the solution is not to use hardcoded literal links, but let GWT make them for you. Hope that helps someone.

UPDATE:

This is the code that throws this error in the standard GWT *.nocache.js file.

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;
    }
  ...
}

Thus, to prevent the compiler message

  • don't have gwt.hybrid in the URL
  • AND DON't have gwt.hosted=
  • OR get.codesvr=
  • OR a Window.external.getOnLoad method

So, in the case of the popup, some server code was redirecting a DevMode session url, but not adding back the "codesvr=" parameter, hence the warning was shown.


Have you compiled the source? This is a surprisingly non-obvious step. If you're using eclipse, you can compile by clicking the red toolbox icon.