2012-03-01 17 views
20

Jeśli wdrożyć plik war Tomcat o nazwie na przykład foo-bar-1.1.2.war, w jaki sposób można wdrożyć go tak, że jest pobierany do webapps/bar i jego główny adres URL to /bar/...?Wdrażanie pliku WAR do Tomcat z inną ścieżkę

Moją intencją jest przechowywanie pliku wojny na serwerze webapps wraz z informacją o jego wersji, dzięki czemu wiem, która wersja jest zainstalowana, ale ma ona nadpisać poprzednią wersję aplikacji.

Mogę wdrożyć plik wojenny za pomocą PSI Probe. To pozwoliłoby mi określić kontekst docelowy dla aplikacji internetowej. Oznacza to jednak, że straciłbym wszelkie informacje o wersji w nazwie pliku wojny.

+0

Prawdopodobny duplikat [Oddzielającej nazwę aplikacji wojennej od nazwy pliku wojny] (http://stackoverflow.com/questions/5875413/separating-war-application-name-from-war-file-name) – OhadR

Odpowiedz

23

Tomcat zawsze wyodrębni zawartość pliku wojny, do folderu o tej samej nazwie (gdy jest skonfigurowany do wdrażania wojen - jako domyślny itd.).

Możesz wyodrębnić go do wybranej nazwy folderu. Jeśli więc ręcznie rozpakujesz zawartość foo.war do folderu o nazwie bar/, zamiast po prostu rzucić wojnę do folderu aplikacji internetowych, nadal będzie ona ładować aplikację internetową.

Jednak jest to zupełnie niepotrzebne, jak można określić wzorzec URL aplikacji nie brudząc z nazwą pliku folderu/wojennej w ogóle nadrzędnymi element kontekstowy katalog główny dla aplikacji:

Często jest ustawiony w Tomcat server.xml - ale ta praktyka jest dość szeroko odradzana. Zamiast tego, sugeruję użyć context.xml w folderze META-INF swojej aplikacji internetowych pliku/War:

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

Gdy aplikacja jest zadziałały, context.xml powinny być kopiowane do /conf/Catalina/localhost ale przemianowany na

Należy pamiętać, że korzenie koneksji muszą być unikatowe i istnieją pewne dodatkowe uwagi, jeśli używasz operacji autoDeploy lub deployOnStartup (Źródło http://tomcat.apache.org/tomcat-7.0-doc/config/context.html).


Inne opcje obejmują:

  • Oczyść web apps folderu każdą instalację i upuść nowy foo-1.1.0 wojnę w
  • Dołącz numer wersji w pliku płaskiego.. foo/version1
  • Albo po prostu dołącz wersję do pliku config/XML.

Można również użyć narzędzia Ant (lub równoważnego narzędzia) do zautomatyzowania wdrożeń (i wykonać dowolne z powyższych czynności).

+0

Myślałem, że może być sposobem na wdrożenie pliku wojny bez ręcznego wyodrębniania jego zawartości, aby zachować informacje o wersji, ale wdrożyć ją w istniejącym kontekście. – z12345

+1

Co twoja wersja aplikacji ma do czynienia z nazwą pliku wojennego/folderu aplikacji? – Mikaveli

+0

Edytowałem pytanie w nadziei, że będzie jaśniejsze. – z12345

4

Jeśli chcesz tylko podać informacje o wersji w swojej nazwie pliku wojny, możesz nazwać ją: my-app##1.2.3.war. Zostanie rozpakowany do katalogu my-app##1.2.3, ale kontekst będzie po prostu my-app (tj. http://host/my-app/).

Działa przynajmniej Tomcat 7.0.55

+0

Aby wdrożyć to za pomocą adresu URL, należy zakodować na adresach URL ostrzeżenia # do% 23, np. 'http: // localhost: 8080/manager/text/deploy? Ścieżka =/myapp% 23% 23v1.2.2.24% 20 (myName) i war = plik:/D: /RELEASE.Tomcat.wars/myapp%23 % 23v1.2.2.24% 20 (myName) .war ', w przeciwnym razie wdrożenie nie powiedzie się, jeśli nie zostanie znaleziony wyjątek. – Max

7

Jest ważnym punktem podkreślić o atrybucie definicji fragmentu kontekst path. Aby przytoczyć documentation on the topic:

Jeżeli operacje autoDeploy lub deployOnStartup są wykonywane przez hosta, nazwę i kontekst ścieżka aplikacji internetowych pochodzi od nazwy (y) pliku (ów) define (s) aplikacja internetowa.

deployOnStartupjest domyślne zachowanie Tomcat gospodarze.

Aby postępować zgodnie z dokumentacją, to ma bardzo ważną konsekwencję:

ścieżkę kontekstowe nie mogą być zdefiniowane w META-INF/context.xml

Według sposobów defining a Tomcat context ta pozwala jedynie dwa rozwiązania:

  • 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, co jest zniechęcony rozwiązanie w środowisku produkcyjnym, ponieważ wymaga ponownego uruchamiania serwera

Innym rozwiązaniem korzysta z unpackWARs attribute.

Z mojego punktu widzenia, ogólnie rzecz biorąc, ogólny i łatwy sposób wdrożenia subtelnej ścieżki w środowisku produkcyjnym, wymaga zapoznania się z plikami wojennymi naming (co może obejmować zarządzanie wersjami i być rozwiązaniem problemu;). Pojedynczy ostry (np. test # path.war) w nazwach plików wojennych implikuje segment w ścieżce kontekstu (np. /test/ścieżka). Podwójne ostrze wprowadza numer wersji (np. test # ścieżka ## 112.war). Działa to niezależnie od tego, czy rozpakowywanie plików wojennych, czy też ich wdrażanie na gorąco, nie jest agnostyczne (menedżer lub system plików) i zarządza wersjami wielokrotnymi tego samego archiwum.

Ale jeśli istnieje potrzeba posiadania ścieżki odrębnej od nazwy archiwum, wydaje się, że jedynym rozwiązaniem jest deskryptor w katalogu /conf/[enginename]/[hostname]/ lub plik server.xml. W tym celu potrzebujesz dostępu do systemu plików serwera.

Właściwe rozwiązanie jest ściśle związane ze sposobem konfiguracji i zarządzania serwerem Tomcat w codziennej pracy.

+0

Nie jestem pewien, czy robię to dobrze, ale wydaje się, że to właściwa droga. Dzięki temu kolumna "wersja" w aplikacji menedżera tomcat ma więcej sensu. Próbuję skopiować/przenieść aplikacje do webaps takich jak 'cp /tmp/tds-5.0.0-alpha3.war thredds ## 500a3.war', aby zachować oddzielne numery wersji dla THREDDS. –

Powiązane problemy