web-dev-qa-db-fra.com

Tomcat ne déploie pas automatiquement le fichier de guerre

J'ai suivi les étapes suivantes

  • Arrêter Tomcat
  • Déploiement d'un fichier de guerre avec un horodatage du 1er décembre
  • Démarrer Tomcat - Cela a créé le répertoire éclaté du fichier de guerre déployé.
  • Arrête Tomcat
  • Mise à jour du fichier de guerre avec un nouveau avec un horodatage du 3 décembre
  • Redémarrez Tomcat

J'ai constaté que lorsque j'ai redémarré Tomcat, les fichiers existants dans le dossier qui avait été développé précédemment n'étaient pas mis à jour. La mise à jour du fichier war ne doit-elle pas avoir mis à jour le fichier de classe jsp correspondant?

J'ai regardé la documentation et j'ai trouvé ceci http://Tomcat.Apache.org/Tomcat-5.5-doc/config/Host.html . La citation suivante sous "Déploiement automatique des applications"

En plus du déploiement automatique qui se produit au démarrage, vous pouvez également demander que de nouveaux fichiers de configuration XML, fichiers WAR ou sous-répertoires qui sont déposés dans l'appBase (ou
$ CATALINA_HOME/conf/[engine_name]/[Host_name] dans le cas d'un fichier de configuration XML) tandis que Tomcat est en cours d'exécution sera automatiquement déployé, selon les règles décrites ci-dessus. Le déployeur automatique effectuera également le suivi des applications Web pour les modifications suivantes:

  • Une mise à jour du fichier WEB-INF/web.xml déclenchera un rechargement de l'application Web
  • Une mise à jour d'une WAR qui a été étendue déclenchera un annulation du déploiement (avec suppression de l'application Web étendue), suivie d'un déploiement
  • Une mise à jour d'un fichier de configuration XML déclenchera un annulation du déploiement (sans suppression de tout répertoire étendu), suivie d'un déploiement de l'application Web associée

Les fichiers n'ont-ils pas dû être mis à jour automatiquement en raison du point 2 ci-dessus?

Autodeploy est défini sur true dans server.xml

30
ziggy

Historiquement, Tomcat n'a jamais mis à jour le répertoire éclaté lorsque vous venez de déposer un nouveau pot, du moins pour moi. J'ai toujours pensé qu'il s'agissait d'un bug, mais je n'y ai jamais réfléchi car il existe une solution simple. Les deux devraient fonctionner correctement:

  • Déployez le fichier war à l'aide de l'application Manager intégrée. Très bien si vous êtes d'accord avec l'utilisation d'une interface graphique pour l'administration de la production. Remarque Cet outil avait des problèmes si vous déployiez plusieurs fois (encore une fois, je ne me suis jamais plongé dans les détails), mais un redémarrage de Tomcat a bien fonctionné.
  • Arrêtez, supprimez et supprimez. Arrêtez Tomcat, supprimez le répertoire éclaté, déposez le nouveau fichier de guerre.
  • 30
    DwB

    Ajoutez autoDeploy = true. Travaille pour moi

    <Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true">
    
    7
    Mircea Stanciu

    J'ai généralement défini le déploiement automatique dans server.xml sur false. Cela me permet de supprimer la nouvelle guerre et de redémarrer Tomcat sans avoir à gérer le répertoire correspondant.

    6
    Ricardo Marimon

    Oui, le répertoire éclaté doit être mis à jour, mais vous n'avez pas besoin d'arrêter Tomcat pour que cela fonctionne - cela fonctionnera avec Tomcat en cours d'exécution. Pouvez-vous réessayer sans arrêter Tomcat entre la mise à jour?

    J'utilise également l'application Manager intégrée qui me permet de mettre à jour les fichiers de guerre n'importe où dans le domaine sans être root (ou Apache ou quoi que Tomcat s'exécute). C'est très pratique et peut être intégré dans un script Ant.

    2
    trojanfoe

    Comme j'utilise maven pour générer mes builds dans Tomcat à l'intérieur d'une boîte Ubuntu, j'ai un script appelé

    install_wars.sh

    Avec le contenu suivant:

    mvn clean install
    service Tomcat7 stop
    find /var/lib/Tomcat7/webapps/ -mindepth 1 -maxdepth 1 -type d -exec rm -rf {} \;
    find . -name *.war -exec cp {} /var/lib/Tomcat7/webapps/ \;
    service Tomcat7 start
    

    Vous souhaiterez peut-être modifier les commandes path et maven en conséquence.

    Les arrêts/démarrages Tomcat sont là pour éviter toute fuite de mémoire pouvant ralentir l'application après plusieurs redéploiements.

    1
    Panthro

    Dans mon cas, je nomme un artefact

    ROOT.WAR
    

    mais devrait être

    ROOT.war
    

    À votre santé!

    1
    Andrew