Bereits in Vorgängerversionen ist Tomcat standardmäßig so konfiguriert, dass WAR Dateien beim Deployment entpackt werden.
Das ermöglicht unter anderem, statische Inhalte (CSS, JS, Bilder, …) über einen anderen Webserver bereit zu stellen.
Allerdings kann es unter gewissen Umständen passieren, dass nach dem Update auf Tomcat 7 Applikationen verpackt bleiben – obwohl unpackWARs
oder unpackWAR
gesetzt ist.
Wann bleibt unpackWARs in Tomcat 7 effektlos?
Ein Vergleich der Tomcat-Dokumentationen zu unpackWAR
im Context Container-Abschnitt ‘Standard Implementation’ zeigt warum:
Wichtiger Unterschied: “Note that WAR files located outside of a Host’s appBase are never unpacked.”
Hat man also beispielsweise in der context.xml
(oder ROOT.xml
) einen Pfad außerhalb des laut server.xml
definierten Hosts angegeben, so ist unpackWARs
effektlos.
Beispiel
Inhalt von /usr/local/apache-tomcat-7.0/conf/Catalina/localhost/ROOT.xml
Lösung: Symlink zur Applikation in webapps Verzeichnis
Damit WAR’s wieder entpackt werden, kann man entweder die appBase in der Host-Definition anpassen oder man entfernt die ROOT.xml
und setzt stattdessen einen entsprechenden Symlink:
Der hier gesetzte Link sorgt dafür, dass die Grails Applikation mit dem Namen “some-grails-app” als ROOT-Anwendung entpackt und gestartet wird.
Vielen Dank für diesen Post. Bin mit meiner Webapplikation genau in das gleiche Problem gelaufen. Die Lösung mit dem Symlink klappt wunderbar.