2012-11-07 14 views
7

Mamy aplikację, która do niedawna była pojedynczym projektem Maven WAR. Używaliśmy wtyczki Maven Tomcat, aby uruchomić aplikację na lokalnych stacjach roboczych deweloperskich przy użyciu:Wtyczka Tomcat Maven i wielomodułowe projekty Maven

mvn tomcat:run 

Udało nam się zmienić pliki JSP, natomiast wbudowany instancji Tomcat został uruchomiony, a zmiany pojawią się w przeglądarkach dobrze. Rozumiem (z dokumentacji wtyczki), że przy korzystaniu z tomcat: uruchom cel WAR jest ładowana jako dynamiczna aplikacja internetowa i dlatego zmiany dokonane w plikach JSP u źródła są pobierane przez Tomcat w czasie wykonywania bez ponownego uruchamiania.

Aplikacja osiągnęła dość duży rozmiar i musieliśmy ponownie użyć dużej liczby klas w kilku różnych miejscach poza projektem sieciowym, więc refaktoryzowaliśmy bazę kodu w wielomodułowy projekt Maven. Struktura jest teraz:

parent Maven POM 
    | 
    ---- artifact1.jar 
    | 
    ---- artifact2.jar -> depends on artifact1.jar 
    | 
    ---- artifact3.jar -> depends on artifact1.jar 
    | 
    ---- artifact4.jar -> depends on artifact2.jar and artifact3.jar 
    | 
    ---- artifact5.war -> depends on artifact1.jar, artifact2.jar, artifact3.jar and artifact4.jar 

Po refaktoryzacji nie byliśmy w stanie użyć tomcat: uruchom z katalogu głównego projektu, aby uruchomić projekt wojnę jako plugin był w stanie wykryć artefakty słoika. Przełączyliśmy się więc na użycie wtyczki tomcat: run-war-only. Moduł WAR uruchamia się teraz dobrze.

Jednak z dokumentacji wydaje się, że celem wojny tylko wojna traktuje pliki WAR jako spakowane aplikacje internetowe. Dlatego wszelkie zmiany, które wprowadzamy w plikach JSP, nie są teraz pobierane przez wbudowany serwer Tomcat podczas działania. Przy każdej zmianie pliku JSP musimy zrestartować serwer.

Czy istnieje sposób dla nas w tym wielomodułowym Maven skonfigurowanym do uruchamiania projektów WAR jako dynamicznych aplikacji internetowych, aby przynajmniej zmiany w plikach JSP zostały pobrane przez Tomcat bez ponownego uruchamiania?

+0

Z pluginami Maven 3.x i Tomcat7 Maven polecenie 'mvn -am -pl artifact5 tomcat7: run' działa dobrze. – manish

Odpowiedz

3

Wystarczy zrobić mvn zainstalować, a następnie

mvn -pl artifact5 tomcat:run 
+0

Wiem, że to rozwiązanie, wymaga tylko dwóch kroków zamiast jednego. Jednak jest to prawidłowe rozwiązanie, cieszę się, że mogę je zaakceptować jako odpowiedź. Muszę uruchomić kompilację jako mvn -pl artifact5 -am tomcat: uruchom, aby zmniejszyć liczbę instancji, nawet jeśli to nie działa. :) – manish

3

Pierwsze użycie nowa wersja Tomcat plugin obecnie znajduje się w Apache zobaczyć http://tomcat.apache.org/maven-plugin-2.0/.

Następnie, jeśli używasz maven3, po prostu użyj tomcat6/tomcat7: uruchom z góry. Wszystkie klasy z modułów zostaną dodane do twojego programu ładującego klasy (zapiszesz trochę ios, ponieważ nie musisz najpierw instalować wszystkich słoików!) Zobacz http://tomcat.apache.org/maven-plugin-2.0/run-mojo-features.html

HTH!

+0

Próbowałem najnowszych wtyczek, ale to nie pomaga. :( – manish

+0

jakaś próbka do odtworzenia twojego problemu? Podstawowy archetyp działa dobrze i jest podobny przypadek użycia –

+0

Myślę, że z Maven 3 nadal musisz instruować maven, aby spakować inne moduły. Używam 'mvn -am package tomcat7: run -war' Pakiet '-am' ma wyraźnie zapakować wszystkie moduły, a' tomcat: run-war' odnosi się tak czy inaczej do WAR. Może to samo dotyczy 'tomcat: run'. –