Развертывание файла войны в Tomcat с другим путем - PullRequest
24 голосов
/ 01 марта 2012

Если я разверну файл войны в Tomcat, который называется, например, foo-bar-1.1.2.war , как я могу развернуть его так, чтобы он был извлечен в * 1005?* webapps / bar и его корень URL-адреса / bar /...?

Я намерен сохранитьфайл war на сервере веб-приложений с информацией о версии, чтобы я знал, какая версия установлена, но перезаписал предыдущую версию приложения.

Я мог бы развернуть файл war, используя PSI Probe ,Это позволило бы мне указать целевой контекст для веб-приложения.Однако это означает, что я потерял бы любую информацию о версии в имени файла войны.

Ответы [ 3 ]

24 голосов
/ 01 марта 2012

Tomcat всегда извлекает содержимое файла войны в папку с тем же именем (когда он настроен для развертывания войн - по умолчанию и т. Д.).

Вы можете извлечь его в любое имя папки по вашему выбору. Поэтому, если вы распакуете содержимое foo.war в папку с именем bar/ вручную, а не просто поместите войну в папку веб-приложений, она все равно загрузит веб-приложение.

Тем не менее, это совершенно не нужно, поскольку вы можете указать шаблон URL приложения, не перепутывая с именем файла folder / war, переопределив корневой элемент контекста для вашего приложения:

Это часто устанавливается в Tomcat server.xml - но такая практика довольно обескуражена. Вместо этого я бы предложил вам использовать context.xml в папке META-INF вашего веб-приложения / файла war:

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

Когда приложение развернуто, context.xml следует скопировать в /conf/Catalina/localhost, но переименовать в foo.xml

Обратите внимание, что корни conext должны быть уникальными, и при использовании операций autoDeploy или deployOnStartup (источник http://tomcat.apache.org/tomcat-7.0-doc/config/context.html).

есть некоторые дополнительные соображения

Другие опции включают в себя:

  • Очистите папку веб-приложений при каждом развертывании и добавьте новую foo-1.1.0 войну.
  • Включить номер версии в плоский файл. foo/version1
  • Или просто включите версию в файл config / XML.

Вы также можете использовать Ant (или аналогичный инструмент) для автоматизации ваших развертываний (и выполнить любое из вышеперечисленного).

12 голосов
/ 01 декабря 2015

Необходимо подчеркнуть один важный момент в атрибуте path определения фрагмента контекста. Для цитирования документации по теме :

Когда операции autoDeploy или deployOnStartup выполняются хостом, имя и контекстный путь веб-приложения определяются на основе имен файлов, которые определяют веб-приложение.

deployOnStartup - поведение хостов Tomcat по умолчанию .

Чтобы следовать документации, это имеет очень важное следствие:

путь контекста не может быть определен в META-INF/context.xml

Согласно способу определения контекста Tomcat , это позволяет использовать только два решения:

  • 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, что является нежелательным решением в производственной среде, поскольку требует перезапуска сервера

Другое решение использует атрибут unpackWARs .

По моему мнению, по этим причинам общим и простым способом реализации тонкого пути в производственной среде является использование именования военных файлов (что может включать управление версиями и решение вашей проблемы). Один резкий (например, test # path.war ) в именах файлов war означает сегмент в пути контекста (например, / test / path ). Двойной шрифт вводит номер версии (например, test # path ## 112.war ). Это работает независимо от того, распаковывается ли файл war, горячее развертывание или нет, не зависит от развертывания (менеджер или файловая система) и управляет несколькими версиями одного и того же архива.

Но если необходимо указать путь, отличный от имени архива, кажется, что единственным решением является дескриптор в каталоге /conf/[enginename]/[hostname]/ или в файле server.xml. Для этого вам необходим доступ к файловой системе сервера.

Соответствующее решение тесно связано с тем, как Tomcat настраивается и управляется в повседневной жизни.

5 голосов
/ 20 ноября 2015

Если вы просто хотите включить информацию о версии в имя вашего военного файла, вы можете назвать его следующим образом: my-app##1.2.3.war. Он распаковывается в каталог my-app##1.2.3, но контекст будет просто my-app (т.е. http://host/my-app/).

Работает как минимум с Tomcat 7.0.55

...