2012-11-07 4 views
7

Abbiamo un'applicazione che fino a poco tempo fa era un singolo progetto Maven WAR. Stavamo usando il plugin Tomcat Maven per eseguire l'applicazione su workstation sviluppatore locale con:Tomcat Maven plug-in e progetti Maven multi-modulo

mvn tomcat:run 

Siamo stati in grado di modificare i file JSP mentre l'istanza di Tomcat incorporato è stato in esecuzione e le variazioni apparirebbero nei browser web più che bene. Capisco (dalla documentazione del plugin) che quando si utilizza il tomcat: run goal, WAR viene caricato come un'applicazione web dinamica e quindi le modifiche apportate ai file JSP all'origine vengono rilevate da Tomcat in fase di runtime senza riavvio.

L'applicazione ha raggiunto dimensioni abbastanza grandi e abbiamo dovuto riutilizzare un gran numero di classi in alcuni punti diversi oltre al progetto Web, quindi abbiamo rifattorizzato la base di codice in un progetto Maven multi-modulo. La struttura è ora:

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 

Dopo il refactoring siamo stati in grado di utilizzare Tomcat: eseguito da root directory del progetto per eseguire il progetto guerra come il plugin è in grado di rilevare i manufatti JAR. Quindi, siamo passati ad usare il plugin tomcat: run-war-only. Il modulo WAR ora si avvia correttamente.

Tuttavia, dalla documentazione, sembra che l'obiettivo della sola guerra esegua i file WAR come applicazioni Web pacchettizzate. Pertanto, le modifiche apportate ai file JSP ora non vengono rilevate dal server Tomcat incorporato durante l'esecuzione. Per ogni modifica ai file JSP dobbiamo riavviare il server.

C'è un modo per noi in questo Maven multi-modulo configurato per eseguire progetti WAR come applicazioni web dinamiche in modo che almeno le modifiche ai file JSP vengano rilevate da Tomcat senza riavviare?

+0

Con il plugin Maven 3.xe Tomcat7 Maven, il comando 'mvn -am -pl artifact5 tomcat7: run' funziona perfettamente. – manish

risposta

3

Basta fare un mvn installare e poi

mvn -pl artifact5 tomcat:run 
+0

So che questa è una soluzione, richiede solo due passaggi invece di uno. Tuttavia, questa è una soluzione valida, sono felice di accettarla come risposta. Devo eseguire la build come mvn -pl artefatto5 -am tomcat: eseguire per ridurre il numero di istanze anche quando questo non funziona. :) – manish

3

Primo utilizzo nuova versione del Tomcat plugin Adesso sto situato a Apache vedere http://tomcat.apache.org/maven-plugin-2.0/.

Quindi se si utilizza maven3, è sufficiente utilizzare tomcat6/tomcat7: esecuzione dall'alto. Tutte le classi dai moduli verranno aggiunte al tuo programma di caricamento del webapp (salverà qualche ios poiché non è necessario installare prima tutti i jar!) Vedi http://tomcat.apache.org/maven-plugin-2.0/run-mojo-features.html

HTH!

+0

Avevo provato gli ultimi plugin ma questo non aiuta. :( – manish

+0

qualsiasi esempio per riprodurre il tuo problema? L'archetipo di base funziona bene ed è un caso d'uso simile –

+0

Penso che con Maven 3 devi ancora istruire Maven a confezionare gli altri moduli. Io uso 'mvn -am pacchetto tomcat7: run -war'. Il pacchetto '-am' consiste nel pacchetto esplicito di tutti i moduli e' tomcat: run-war' si applica solo alla WAR comunque, forse lo stesso vale per 'tomcat: run'. –