web-dev-qa-db-fra.com

Déployer le fichier war sur Tomcat avec un chemin différent

Si je déploie un fichier war sur Tomcat, appelé par exemple foo-bar-1.1.2.war , comment puis-je le déployer pour qu'il soit extrait vers webapps/bar et sa racine URL est /bar /...?

Mon intention ici est de conserver le fichier war sur le serveur webapps avec ses informations de version afin que je sache quelle version est installée mais qu'il écrase une version précédente de l'application.

Je pourrais déployer le fichier war en utilisant PSI Probe . Cela me permettrait de spécifier un contexte cible pour l'application Web. Cependant, cela signifie que je perdrais toutes les informations de version dans le nom du fichier war.

24
z12345

Tomcat extraira toujours le contenu d'un fichier de guerre dans un dossier du même nom (lorsqu'il est configuré pour déployer des guerres - par défaut, etc.).

Vous pouvez l'extraire dans un nom de dossier de votre choix. Donc, si vous décompressez le contenu de foo.war dans un dossier appelé bar/ manuellement, au lieu de simplement déposer la guerre dans le dossier des applications Web, il chargera toujours l'application Web.

Cependant, cela est totalement inutile car vous pouvez spécifier le modèle d'URL de l'application sans jouer avec le nom du dossier/fichier de guerre en remplaçant l'élément racine de contexte pour votre application:

Ceci est souvent défini dans le Tomcat server.xml - mais cette pratique est assez largement découragée. Au lieu de cela, je vous suggère d'utiliser context.xml dans le dossier META-INF de votre application web/fichier war:

<Context path="/bar" .../>

Lorsque l'application est déployée, le context.xml doit être copié dans /conf/Catalina/localhost mais renommé foo.xml

Notez que les racines de contexte doivent être uniques et il y a quelques considérations supplémentaires si vous utilisez les opérations autoDeploy ou deployOnStartup (Source http://Tomcat.Apache.org/Tomcat) -7.0-doc/config/context.html ).


Les autres options incluent:

  • Nettoyez le dossier des applications Web à chaque déploiement et déposez votre nouveau foo-1.1.0 guerre en.
  • Incluez le numéro de version dans un fichier plat. foo/version1
  • Ou incluez simplement la version dans un fichier config/XML.

Vous pouvez également utiliser Ant (ou un outil équivalent) pour automatiser vos déploiements (et effectuer l'une des opérations ci-dessus).

24
Michael

Il y a un point important à souligner à propos de l'attribut path de la définition du fragment de contexte. Pour citer le documentation sur le sujet :

Lorsque les opérations autoDeploy ou deployOnStartup sont effectuées par un hôte, le nom et le chemin de contexte de l'application Web sont dérivés du ou des fichiers qui définissent l'application Web.

deployOnStartup est le comportement par défaut des hôtes Tomcat .

Pour suivre la documentation, cela a une conséquence très importante:

le chemin de contexte ne peut pas être défini dans un META-INF/context.xml

Selon les façons de définir un contexte Tomcat , cela ne permet que deux solutions:

  • In individual files (with a ".xml" extension) in the $CATALINA_BASE/conf/[enginename]/[hostname]/ directory
  • Inside a Host element in the main conf/server.xml, Qui est une solution déconseillée dans un environnement de production car elle nécessite le redémarrage du serveur

Une autre solution tire parti de l'attribut unpackWARs .

À mon point de vue, pour ces raisons, la manière générale et facile d'implémenter un chemin subtil dans un environnement de production profite de la nommage des fichiers de guerre (ce qui pourrait inclure la gestion des versions et être une solution à votre problème). Un seul pointu (par exemple test # path.war) dans les noms des fichiers war implique un segment dans le chemin du contexte (par exemple /test/path). Un double pointu introduit le numéro de version (par exemple test # path ## 112.war). Cela fonctionne que le déballage des fichiers de guerre, le déploiement à chaud ou non, soit indépendant du déploiement (gestionnaire ou système de fichiers) et gère plusieurs versions d'une même archive.

Mais s'il est nécessaire d'avoir un chemin distinct du nom de l'archive, il semble que la seule solution soit le descripteur dans le répertoire /conf/[enginename]/[hostname]/ Ou le fichier server.xml. Pour ceux-ci, vous avez besoin d'un accès au système de fichiers du serveur.

La solution pertinente est fortement liée à la façon dont Tomcat est configuré et géré au quotidien.

12
bdulac

Si vous voulez simplement inclure une information de version dans votre nom de fichier war, vous pouvez le nommer comme: my-app##1.2.3.war. Il est décompressé dans le répertoire my-app##1.2.3 mais le contexte sera juste my-app (c'est-à-dire http: // Host/my-app / ).

Fonctionne au moins avec Tomcat 7.0.55

5
Peter Clause