web-dev-qa-db-fra.com

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

J'utilise Intellij Ultimate avec Tomcat et déploie une guerre. Tout se passe bien dans le répertoire webapp de Tomcat.

Lorsque je modifie un fichier comme un fichier xhtml, existe-t-il un moyen pour Tomcat de prendre automatiquement en compte ce changement? À partir de maintenant, je dois copier le fichier depuis intellij et le copier dans le répertoire de son emplacement dans le répertoire Webapp de Tomcat. Je sais que certains fichiers nécessiteront une recompilation, mais ceux de xhtml n'en font pas partie.

126
Peter

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

  1. ouvrez votre configuration Tomcat Run/Debug (Run> Edit Configurations)
  2. Allez dans l'onglet "Déploiement"
  3. Dans la section "Déployer au démarrage du serveur", supprimez l'artefact my-webapp-name:war (le cas échéant).
  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, définissez le paramètre "Désactivation sur image" sur "Mise à jour des ressources" ou "Mise à jour des classes et des ressources"
    • Ressources de mise à jour: Toutes les ressources modifiées (c'est-à-dire tous les 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 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 utilisées par les JSP ou les servlets. Vous devez modifier Tomcat pour utiliser un chargeur de classe dynamique à cette fin.
  8. Vous pouvez également définir l'action "On 'update'" sur celle sélectionnée ci-dessus.
    • Cela a déterminé ce qui se passe lorsque vous cliquez sur la mise à jour Update icon icône (ou Ctrl+F10) dans la fenêtre Run.
    • la "boîte de dialogue Afficher" détermine si IDEA vous y invite chaque fois que vous cliquez sur l'icône de mise à jour.
  9. Cliquez sur OK.

Désormais, chaque fois que vous apportez une modification, IDEA redéploiera le ou les fichiers modifiés lorsque le cadre d’IDEA est désactivé (c’est-à-dire qu’il perd le focus). Cela prend une seconde ou deux, vous le verrez dans la barre d'état inférieure dans IDEA. Évidemment. vous aurez toujours besoin d'actualiser votre navigateur Web pour qu'il récupère le nouveau fichier (sauf si la page a une actualisation automatique comme ajax, comme fetch).

Une bonne combinaison avec Tomcat consiste à définir "Mise à jour des ressources" sur "Mise à jour des ressources" et sur "Redéployer" ou "Redémarrer le serveur" pour l'action "Mise à jour des ressources". classe mise à jour via l'action 'update'.

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

275
Javaru

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

  1. Ouvrez votre configuration Tomcat Run/Debug (Run> Edit Configurations).

enter image description here

  1. Cliquez sur l'icône d'ajout, sélectionnez 'artefact', puis sélectionnez pizza_mvc:war exploded: enter image description here

  2. Modifiez 'On update action' et 'On frame diactivation': enter image description here

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

17
Lord Nighton

Si vous souhaitez mettre à jour des classes et des ressources, exécutez Tomcat en mode débogage . . Dans ce mode IntelliJ, mettez à 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 cours en tant que "mode d'exécution". Lorsque je suis en mode débogage et que je clique sur Ctrl+F10, il met à jour les classes et les ressources.

11
Łukasz Woźniak

J'ai trouvé un meilleur moyen.

Dans Eclipse , nous avons automatiquement construit, compilé + rechargé des fichiers statiques. En réalité, les fichiers statiques sont servis directement à partir de src/main/webapp .

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

Si vous placez à la place de la cible la sortie de l'artefact éclaté à src/main/webapp , les fichiers source ne seront pas écrasés et seront directement utilisés. , vous n'aurez pas besoin de frapper - mettez à jour les ressources/mettez à jour les ressources et les classes

Donc, ce que vous devez faire dans IntelliJ est

  1. modifie le répertoire de sortie de l'artefact éclaté en src/main/webapp enter image description here
  2. faire une macro pour enregistrer et recompiler/compiler des classes sales (cmd + shift + f9) enter image description hereenter image description here
  3. modifier le registre et les préférences pour construire automatiquement et construire pendant l'exécution de l'application (cmd + shift + a - registre). enter image description hereenter image description here

Après cela, si vous avez des travaux qui modifient des fichiers statiques extérieurs à IntelliJ , vous verrez les modifications immédiatement sans passer par IntelliJ et Update Resources , et pour les classes. vous avez cette macro qui enregistre et compile (Remarque: vous pouvez également appuyer sur Compiler/Recompiler: cmd + décalage + 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)

1
Radu Toader