IntelliJ et Tomcat… les fichiers modifiés ne sont pas automatiquement reconnus par Tomcat

135

J'exécute Intellij Ultimate avec Tomcat et déploie une guerre. Tout se déploie correctement dans le répertoire webapp de tomcat.

Lorsque je change un fichier comme un fichier xhtml, existe-t-il un moyen pour Tomcat de récupérer automatiquement ce changement? À partir de maintenant, je dois copier le fichier d'Intellij et le copier dans le répertoire où il réside dans le répertoire de l'application Web Tomcat. Je sais qu'il y a certains fichiers qui auront besoin d'une recompilation, mais les xhtml n'en font pas partie.

Peter
la source

Réponses:

21

Permettez-moi de décrire la séquence d'actions à l'aide de captures d'écran:

  1. Ouvrez votre configuration Tomcat Run / Debug (Exécuter> Modifier les configurations)

entrez la description de l'image ici

  1. Cliquez sur l'icône d'ajout, sélectionnez `` artefact '', puis sélectionnez pizza_mvc:war exploded: entrez la description de l'image ici

  2. Modifiez 'Sur l'action de mise à jour' et 'Sur la désactivation du cadre': entrez la description de l'image ici

  3. Chaque fois que vous souhaitez actualiser vos ressources, appuyez sur <Ctrl> + F10

Lord Nighton
la source
Merci de m'avoir rappelé de cocher "Sur l'action 'Mettre à jour'"
km1
290

Cela ne peut pas être fait si vous déployez une guerre avec IntelliJ IDEA. Cependant, cela peut être le cas si vous déployez une guerre éclatée . Dans IDEA:

  1. ouvrez votre configuration Tomcat Run / Debug ( Exécuter> Modifier les configurations )
  2. Allez dans l'onglet "Déploiement"
  3. Dans la section "Déployer au démarrage du serveur", supprimez (le cas échéant) l'artefact my-webapp-name:war
  4. Cliquez sur l'icône d'ajout, sélectionnez `` artefact '', puis sélectionnez my-webapp-name:war exploded
  5. Cliquez sur OK (dans la boîte de dialogue "Sélectionner les artefacts à déployer")
  6. Toujours dans la fenêtre de configuration Exécuter / Déboguer, sélectionnez l'onglet "Serveur"
  7. Au milieu de cet onglet, modifiez le paramètre «Désactivation du cadre» sur «Mettre à jour les ressources» ou «Mettre à jour les classes et les ressources»
    • Mettre à jour les ressources: toutes les ressources modifiées (c'est-à-dire tous les composants d'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 du serveur Web de fonctionnalités. Si je me souviens bien, Tomcat rechargera les fichiers html / xhtml et jsp, mais pas les servlets ou les classes que les JSP ou les servlets utilisent. Vous devez modifier Tomcat pour utiliser un chargeur de classe dynamique pour cela.
  8. Vous pouvez également définir l'action " Sur 'mise à jour' " sur celle sélectionnée ci-dessus.
    • Cela a déterminé ce qui se passe lorsque vous appuyez sur l' Icône de mise à jouricône de mise à jour (ou Ctrl+ F10) dans la fenêtre Exécuter.
    • la "Afficher la boîte de dialogue" détermine si IDEA vous invite à chaque fois que vous cliquez sur l'icône de mise à jour
  9. Cliquez sur OK.

Désormais, à chaque fois que vous effectuez une modification, IDEA redéploiera le (s) fichier (s) modifié (s) lorsque le cadre d'IDEA est désactivé (c'est-à-dire perd le focus). Cela prend une seconde ou deux, vous le verrez dans la barre d'état inférieure d'IDEA. Évidemment. vous devrez toujours actualiser votre navigateur Web pour qu'il récupère le nouveau fichier (sauf bien sûr si la page dispose d'un rafraîchissement automatique d'ajax comme fetch).

Une bonne combinaison avec Tomcat consiste à définir "Désactivation du cadre" sur "Mettre à jour les ressources" et l'action "Lors de la mise à jour" sur "Redéployer" ou "Redémarrer le serveur". Cela permet aux pages statiques d'être rapidement mises à jour via la désactivation du cadre, et classe mise à jour via l'action 'update'.

Une société nommée ZeroTurnaround vend JRebel, une solution de chargeur de classe dynamique. Ils ont également une série en cinq parties sur le sujet qui est très bien.

Javaru
la source
J'ai une erreur: Error: Artifact 'my-webapp-name:war exploded' has invalid extensioncomment réparer?
Anton Dozortsev
3
Je recommande également fortement d'utiliser DCEVM pour le rechargement automatique des classes. Vous pouvez ensuite utiliser «Mettre à jour les classes et les ressources» pour appliquer les modifications au code source sans redéployer l'application. Voir: blog.jetbrains.com/idea/2013/07/… . En plus de ce que ce didacticiel explique, il est nécessaire de définir JAVA_HOME dans l'onglet Configuration / Connexion - Débogage de la configuration d'exécution Tomcat pour qu'il pointe vers le JRE de DCEVM.
Alex Fedulov
1
@yaroslavprokipchyn - Je ne connais pas JBoss et les exigences «spéciales» qu'il pourrait avoir. Mais pour autant que je sache, cela devrait fonctionner de la même manière. Pour tomcat, IDEA crée une configuration Tomcat (context.xml) qui indique à Tomcat d'utiliser le répertoire cible / {contextName} comme répertoire racine de l'application Web. Vous pouvez consulter le guide d'aide pour obtenir des informations spécifiques à JBOss.
Javaru
3
À l'étape 7, vous n'obtiendrez pas (au moins dans Intellij 14) les choix de liste déroulante appropriés à moins que tous vos artefacts soient chargés comme "éclatés".
mortensi
1
@ChiefTwoPencils - L'étape 5 consiste à cliquer sur OK dans la boîte de dialogue «Sélectionner les artefacts à déployer» (pour laquelle il n'y a pas de «appliquer»), pas dans la fenêtre de configuration Exécuter / Déboguer. J'ai ajouté une déclaration de clarification à l'étape 5.
Javaru
12

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

J'ai le même problème. IntelliJ n'a pas mis à jour mon projet, car je l'exécute en "mode Exécution". Lorsque je cours en mode débogage et que j'appuie sur Ctrl+ F10, cela met à jour les classes et les ressources.

Łukasz Woźniak
la source
Control-F10 a résolu le problème pour moi. Je vous remercie!
Jeffrey Getzin
3

J'ai trouvé un meilleur moyen.

Dans Eclipse, nous avons automatiquement construit, compilé et rechargé des fichiers statiques. En fait, les fichiers statiques sont servis directement depuis src / main / webapp .

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

Si vous placez à la place de la cible la sortie de l'artefact éclaté dans src / main / webapp , cela n'écrasera pas vos fichiers source, et il servira directement, vous n'aurez pas à frapper - 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 éclaté en src / main / webapp entrez la description de l'image ici
  2. créer une macro pour enregistrer 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 créer automatiquement et construire pendant l'exécution de l'application (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 travaux qui modifient des fichiers statiques en dehors d'IntelliJ, vous verrez immédiatement les changements sans accéder à IntelliJ et Update Resources , et pour les classes, vous avez cette macro qui enregistre et compile (Remarque: vous pouvez également simplement appuyer sur Compiler / Recompiler: cmd + shift + F9 / cmd + F9 - si vous avez plusieurs éditeurs ouverts, vous verrez que vos éditeurs sales * ne seront pas sales, et les changements (classes) seront rechargés)

Radu Toader
la source
Il semble que si vous avez le registre compiler.automake .. activé, il pousse vos modifications en appuyant simplement sur Enregistrer aussi.
Radu Toader
0

Cela n'est possible que lorsque vous déployez le dossier war éclaté, avez activé le rechargement à chaud et démarrez tomcat en mode débogage.

Voici les étapes pour y parvenir.

  1. ouvrez votre configuration Tomcat Run / Debug (Exécuter> Modifier les configurations)
  2. Allez dans l'onglet «Déploiement» 3.Dans la section «Déployer au démarrage du serveur», supprimez (le cas échéant) l'artefact my-webapp-name: war
  3. Cliquez sur l'icône d'ajout, sélectionnez `` artefact '', puis sélectionnez my-webapp-name: war éclaté
  4. Cliquez sur OK (dans la boîte de dialogue "Sélectionner les artefacts à déployer")
  5. Toujours dans la fenêtre de configuration Exécuter / Déboguer, sélectionnez l'onglet "Serveur"
  6. Modifiez les paramètres «Désactivation sur image» et «Action de mise à jour» sur «Mettre à jour les classes et les ressources»
  7. Appliquer et enregistrer
  8. Accédez aux paramètres normaux des projets en cliquant sur Fichier puis sur Paramètres OU en appuyant sur CTRL + ALT + S
  9. aller à "Build, Execution, Deployment"
  10. Compilateur
  11. Sélectionnez Créer un projet automatiquement
  12. enregistrer
  13. Démarrez Tomcat en mode débogage
Adindu Stevens
la source
0

si vous avez des fichiers en plusieurs parties que vous souhaitez voir / lire tout de suite, téléchargez directement dans le dossier cible. * (ne changez l'emplacement d'écriture que dans le dossier cible / static /)

String yourpath = C\\andSoForth
    yourPath + "\\target\\classes\\static\\uploads\\audiofiles\\"

vous pourrez voir votre fichier immédiatement sans avoir à redémarrer votre IDE

Esther
la source