152 votes

IntelliJ et WAR.... les fichiers modifiés ne sont pas automatiquement reconnus par le serveur

Je suis en train d'utiliser Intellij Ultimate avec Tomcat et de déployer un war. Tout se déploie correctement dans le répertoire webapp de Tomcat.

Lorsque je modifie un fichier comme un fichier xhtml, y a-t-il un moyen pour que Tomcat prenne automatiquement en compte ce changement ? Pour l'instant, je dois copier le fichier depuis Intellij et le copier dans le répertoire où il se trouve dans le répertoire de l'application web de Tomcat. Je sais qu'il y a certains fichiers qui nécessitent une recompilation, mais les xhtml ne sont pas concernés.

305voto

Mark Vedder Points 4422

Cela ne peut pas être fait si vous déployez un war avec IntelliJ IDEA. Cependant, cela peut l'être si vous déployez un war explosé. Dans IDEA :

  1. ouvrez votre configuration d'exécution/débogage Tomcat (Run > Edit Configurations)
  2. Allez sur l'onglet "Déploiement"
  3. Dans la section "Déployer au démarrage du serveur", supprimez (le cas échéant) l'artifact my-webapp-name:war
  4. Cliquez sur l'icône d'ajout, sélectionnez 'artifact' et choisissez ensuite my-webapp-name:war exploded
  5. Cliquez sur OK (sur la boîte de dialogue "Sélectionner les Artifacts à Déployer")
  6. Toujours dans la Fenêtre de Configuration d'Exécution/Débogage, sélectionnez l'onglet "Serveur"
  7. Au milieu de cet onglet, changez le paramètre "Sur la désactivation de la fenêtre" en "Mettre à jour les ressources" ou "Mettre à jour les classes et les ressources"
    • Mettre à jour les ressources : Toutes les ressources modifiées (c'est-à-dire l'ensemble des composants de l'application autres que les classes) seront mises à jour.
    • Mettre à jour les classes et les ressources : Toutes les ressources modifiées seront mises à jour ; les classes modifiées seront recompilées. Notez que la mise à jour des classes réelles dépend des capacités du serveur web. Si je me souviens bien, Tomcat rechargera les fichiers html/xhtml et jsp, mais pas les Servlets ou les classes utilisées par les JSP ou les Servlets. Vous devez modifier Tomcat pour utiliser un classloader dynamique à cet effet.
  8. Vous pouvez également définir l'action "Sur 'mettre à jour' " sur celle sélectionnée ci-dessus également.
    • Cela détermine ce qui se passe lorsque vous appuyez sur l'icône Mise à jour Icône de mise à jour (ou Ctrl+F10) dans la fenêtre d'exécution.
    • la "Afficher la boîte de dialogue" détermine si IDEA vous demande à chaque fois que vous appuyez sur l'icône de mise à jour
  9. Cliquez sur OK.

Maintenant, chaque fois que vous apportez une modification, IDEA redéploiera le(s) fichier(s) modifié(s) lorsque la fenêtre de IDEA sera désactivée (c'est-à-dire qu'elle perd le focus). Cela prendra une seconde ou deux, vous le verrez dans la barre d'état inférieure de IDEA. Bien sûr, vous devrez toujours rafraîchir votre navigateur web pour qu'il récupère le nouveau fichier (à moins bien sûr que la page ait un rafraîchissement automatique ou ajax comme fetch).

Une bonne combinaison avec Tomcat est de définir "Sur la désactivation de la fenêtre" sur "Mettre à jour les ressources" et l'action "Sur 'mettre à jour'" sur "Redéployer" ou "Redémarrer le Serveur". Cela permet de mettre à jour rapidement les pages statiques via la désactivation de la fenêtre, et de mettre à jour les classes via l'action 'mise à jour'.

Une entreprise nommée ZeroTurnaround vend JRebel qui est une solution de classloader dynamique. Ils ont également une série en cinq parties sur le sujet qui est très bonne.

28voto

Lord Nighton Points 1570

Permettez-moi de décrire la séquence des actions en utilisant des captures d'écran :

  1. Ouvrez votre configuration d'exécution/débogage Tomcat (Run > Edit Configurations)

entrer la description de l'image ici

  1. Cliquez sur l'icône d'ajout, sélectionnez 'artifact' et choisissez ensuite pizza_mvc:war exploded : entrer la description de l'image ici

  2. Modifiez 'On update action' et 'On frame diactivation' : entrer la description de l'image ici

  3. À chaque fois que vous voulez rafraîchir vos ressources, appuyez sur + F10

12voto

Łukasz Woźniak Points 261

Si vous souhaitez mettre à jour les classes et les ressources, exécutez Tomcat en mode Debug. Dans ce mode, IntelliJ met à jour les classes et les ressources sans problème (hot swap).

J'ai rencontré le même problème. IntelliJ n'a pas mis à jour mon projet, car je l'ai exécuté en mode "Run". Lorsque je l'exécute en mode debug et que j'appuie sur Ctrl+F10, il met à jour les classes et les ressources.

3voto

Radu Toader Points 160

J'ai trouvé un meilleur moyen.

Dans Eclipse, nous avons automatiquement la construction, la compilation + le rechargement des fichiers statiques. En fait, les fichiers statiques sont servis directement depuis src/main/webapp.

Dans IntelliJ au lieu de servir directement depuis src/main/webapp, un dossier est créé dans target, dans lequel vous aurez une copie de votre src/main/webapp et aussi d'autres contextes associés .. web-inf/classes /lib.

Si vous mettez, au lieu du target, la sortie de l'artefact explosé vers src/main/webapp, cela ne remplacera pas vos fichiers source, et cela servira directement, vous n'aurez pas à appuyer sur - mettre à jour les ressources / mettre à jour les ressources et les classes

Donc ce que vous devez faire dans IntelliJ est

  1. modifier le répertoire de sortie de l'artefact explosé en src/main/webapp entrez la description de l'image ici
  2. créer un macro pour sauvegarder et recompiler / compiler les classes sales (cmd+shift+f9) entrez la description de l'image ici entrez la description de l'image ici
  3. modifier le registre et les préférences pour construire automatiquement et construire pendant que l'application s'exécute(cmd+shift+a - registre). entrez la description de l'image ici entrez la description de l'image ici

Après cela, si vous avez des tâches qui modifient des fichiers statiques depuis l'extérieur d'IntelliJ, vous verrez les changements immédiatement sans aller dans IntelliJ et mettre à jour les ressources, et pour les classes que vous avez cette macro qui enregistre et compile(Note : Vous pourriez aussi simplement appuyer sur Compiler/Recompiler : cmd + shift + F9 / cmd + F9 - si vous avez plusieurs éditeurs ouverts vous verrez que vos éditeurs sales seront propres, et les modifications (classes) seront rechargées)

0voto

Adindu Stevens Points 100

C'est possible uniquement lorsque vous déployez le dossier war explosé, activez le rechargement à chaud et démarrez tomcat en mode débogage.

Voici les étapes à suivre pour y parvenir.

  1. Ouvrez votre configuration d'exécution/débogage Tomcat (Exécuter > Modifier les configurations)
  2. Allez dans l'onglet "Déploiement" 3.Dans la section "Déployer au démarrage du serveur", supprimez (si présent) l'artefact my-webapp-name:war
  3. Cliquez sur l'icône d'ajout, sélectionnez 'artefact' puis sélectionnez my-webapp-name:war explosé
  4. Cliquez sur OK (dans la boîte de dialogue "Sélectionner les artefacts à déployer")
  5. Toujours dans la fenêtre de configuration d'exécution/débogage, sélectionnez l'onglet "Serveur"
  6. Modifiez les paramètres "À la désactivation du cadre" et "À l'action de mise à jour" à "Mettre à jour les classes et ressources"
  7. Appliquez et enregistrez
  8. Accédez aux paramètres normaux du projet en cliquant sur Fichier puis Paramètres OU en appuyant sur CTRL + ALT + S
  9. Allez dans "Compiler"
  10. Sélectionnez Construire automatiquement le projet
  11. Enregistrez
  12. Démarrer tomcat en mode débogage

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X