开发者

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. Obvious开发者_StackOverflowly, 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.

GWT module may need to be (re)compiled REDUX

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.


You have to run mvn gwt:compile additionally to the usual mvn clean install package, as the GWT-compilation is NOT part of the maven-package-phase. This solves the annoying Javascript-(re)compile-error.


I had a similar problem. Doing mvn clean install on my GWT project got me a war file, which upon deploying in tomcat resulted in the same "GWT Module 'mymodule' may need to be (re)compiled" dialog message. I also did all the mentioned stuff in here without any success.

Doing mvn clean install -DskipTests=true did the job for me.
OR
Doing mvn clean install without invoking the generated test URL (sth. like this: http://<localIp>:53701/mymoduleJUnit.JUnit/junit-standards.html?gwt.codesvr=<localIp>:53697)

The test phase obviously did overwrite my initially created *.nocache.js via some fancy development mode url, thus packaging me a wrong *.nocache.js in the end.


My Dev mode was correctly configured and above solution didn't work. Following did solve the issue though.

Multiple steps:

  1. Update Project properties -> deployment Assembly using Deploy GWT maven project with eclipse deploys webapp directory instead of target/project directory
  2. mvn clean package
  3. mvn gwt:compile
  4. In eclipse, click on 'GWT Compile Project' -> Advacned -> Remove '-war src/main/webapp' argument and hit compile.

Output should be like this - Linking into target/project-1.0-SNAPSHOT/ModuleName

... and deployment works fine.


This could apply to all other valid Answers here too: Sometimes you may need to just do a hard/cache browser refresh (ctrl+F5) after following one of them.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜