Подтвердить что ты не робот

Развертывание военного файла Tomcat другим путем

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

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

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

4b9b3361

Ответ 1

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

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

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

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

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

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

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


Другие варианты:

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

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

Ответ 2

Важно подчеркнуть атрибут 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.

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

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

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

Ответ 3

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

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

Ответ 4

Я применил проверенный ответ, который не очень помогает, я вручную развертывал файл war. Он не работал по умолчанию, только развертывание каталога tomcat webapps, если любой из приведенных в качестве примера решения означает, что это всегда приветствуется.