web-dev-qa-db-fra.com

Le module GWT peut avoir besoin d'être (re) compilé REDUX

Lorsque je travaille en mode compilé, le module «mymodule» redouté de GWT peut nécessiter un message de dialogue (re) compilé.

J'ai compilé une liste de choses que d'autres ont suggéré d'essayer lorsque GWT s'exécutant en mode compilé reçoit ce message d'erreur. J'ai ouvert le fichier WAR créé par maven et tous les fichiers sont au bon endroit. Je l'ai confirmé contre un autre projet mWG de GWT qui ne rencontre pas cette erreur. Cependant, aucune des suggestions ci-dessous n'a corrigé le problème. Je n'ai pas non plus été en mesure d'identifier la différence qui manque entre ces deux projets - celui qui fonctionne et le mien qui ne fonctionnera pas en mode compilé.

Que puis-je essayer?

59
James A Wilson

Avez-vous démarré le DevMode en utilisant votre src/main/webapp comme "dossier de guerre"? ou en d'autres termes, y a-t-il un *.nocache.js dans votre src/main/webapp? Dans ce cas, ce fichier écrasera celui produit par le compilateur GWT, appelé par le plugin gwt-maven.

Le *.nocache.js généré par le DevMode (lorsqu'il n'en existe aucun, généré par une compilation précédente de GWT) contient uniquement les bits nécessaires au lancement du DevMode et échouera sinon avec l'erreur susmentionnée.

53
Thomas Broyer

Recherchez un fichier appelé <MODULE_NAME>.nocache.js dans src/main/webapp/<MODULE_NAME> et supprimez-le/renommez-le.

Ensuite, faites votre paquet mvn et tout devrait bien se passer. 

Ce problème peut se produire lorsque vous exécutez le mode Dev dans Eclipse. Eclipse générera le fichier nocache.js et le placera dans le répertoire src/main/webapp.

Ensuite, lorsque vous exécutez mvn pacakge, le plug-in maven crée le déploiement nocache.js et le place au bon endroit. Toutefois, lorsqu'il empaquete les fichiers dans un fichier war, il redéfinit le droit de déploiement nocache.js avec celui créé par Eclipse.

16
Adam Davies

J'ai trouvé le même problème dans DevMode s'il y avait un lien statique vers une autre page de l'application (c'est-à-dire monModule2.html). Comme il manquait la chaîne ? Gwt.codesvr = 127.0.0.1: 9997, il a été interprété comme une application GWT statique (déjà compilée), ce qui n'était pas le cas, en lançant le code d'erreur que vous avez mentionné.

enter image description here

Bien entendu, la solution ne consiste pas à utiliser des liens littéraux codés en dur, mais à laisser GWT les créer pour vous. J'espère que ça aide quelqu'un.

METTRE À JOUR:

C'est le code qui renvoie cette erreur dans le fichier GWT * .nocache.js standard.

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

Ainsi, pour empêcher le message du compilateur

  • ne pas avoir gwt.hybrid dans l'URL
  • ET NE PAS avoir gwt.hosted =
  • OU get.codesvr =
  • OU une méthode Window.external.getOnLoad

Ainsi, dans le cas de la fenêtre contextuelle, certains codes de serveur redirigeaient une URL de session DevMode, mais ne rajoutaient pas le paramètre "codesvr =". L'avertissement était donc affiché.

5
Joseph Lust

Vous devez exécuter mvn gwt:compile en plus du mvn clean install package habituel, car la compilation GWT ne fait PAS partie de la phase de paquetages maven . Ceci résout l'erreur de compilation/compilation de Javascript.

2
ifischer

Avez-vous compilé la source? C'est une étape étonnamment peu évidente. Si vous utilisez Eclipse, vous pouvez compiler en cliquant sur l'icône rouge de la boîte à outils. 

2
Riley Lark

Mon mode Dev était correctement configuré et la solution ci-dessus ne fonctionnait pas. La suite a résolu le problème cependant.

Plusieurs étapes:

  1. Mettre à jour les propriétés du projet -> assembly de déploiement avec Déployer le projet maven GWT avec Eclipse déploie le répertoire webapp au lieu du répertoire cible/project
  2. paquet propre mvn
  3. mvn gwt: compiler
  4. Dans Eclipse, cliquez sur 'Projet GWT Compile' -> Advacned -> Supprimer l'argument '-war src/main/webapp' et cliquez sur Compiler.

La sortie devrait être comme ceci - Lien dans target/project-1.0-SNAPSHOT/ModuleName

... et le déploiement fonctionne bien.

0
tj-recess

J'avais un problème similaire. Faire mvn clean install sur mon projet GWT m'a fourni un fichier war qui, après son déploiement dans Tomcat, a donné le même message de dialogue "Module GWT 'mymodule' nécessitant d'être (re) compilé". J'ai également fait tous les trucs mentionnés ici sans aucun succès.

Faire mvn clean install -DskipTests=true a fait le travail pour moi.
OU 
Faire mvn clean install sans appeler l'URL de test générée (sth. Comme ceci: http://<localIp>:53701/mymoduleJUnit.JUnit/junit-standards.html?gwt.codesvr=<localIp>:53697)

La phase de test a évidemment écrasé le *.nocache.js initialement créé via une url de mode de développement sophistiquée, me plaçant ainsi à la place d'un *.nocache.js erroné.

0
cbopp

Cela pourrait également s'appliquer à toutes les autres réponses valides: parfois, vous devrez peut-être simplement actualiser votre navigateur/cache (ctrl + F5) après avoir suivi l'une d'entre elles.

0
cellepo