2009-03-12 15 views
18

Ho una serie di app Web che gestisco che sto cercando di spostare in Maven.Come distribuire più app web peer da un padre gen

 
/pom.xml   // parent pom 
webapp1/pom.xml // configured to point to parent 
webapp2/pom.xml // peer of webapp1 and points to parent. 

ciascuno dei webapps si riferisce alla POM genitore, ed entrambi hanno attualmente un plugin Maven pontile che funziona.

La mia domanda è: come faccio a montare ciascuna delle webapp dal genitore pom in modo tale che mvn jetty: run funzioni nella directory padre?

Modifica per Anwer: Pascal T Il problema non è tanto che sto ricevendo un errore quando provo ed eseguire il comando dalla pom radice, ma che non sono sicuro come configurarlo.

ad esempio la WebApp1/pom.xml assomiglia:

<project> 
... 
<plugins> 
    <plugin> 
    <groupId>org.mortbay.jetty</groupId> 
    <artifactId>maven-jetty-plugin</artifactId> 
    </plugin> 
</plugins> 
... 
</project> 

passare a questa directory e digitando mvn jetty: run funziona bene e mi offre la possibilità di colpire: http://localhost:8080/webapp1.

Tuttavia, ciò che vorrei sarebbe essere nella cartella madre di webapp1 ed eseguire tutte le applicazioni web "n" dalla directory padre. Così avendo http://localhost:8080/webapp1 e http://localhost:8080/webapp2 disponibile con un parametro della riga di comando.

btw, se la risposta riguardava un plugin per il tomcat, andrebbe bene.

+0

Capisco meglio cosa vuoi fare e ho modificato la mia risposta iniziale –

+0

La stessa domanda di [Possibile eseguire due webapp contemporaneamente quando si sviluppa con Maven/Eclipse?] (Http://stackoverflow.com/questions/5519066/ possibile-to-run-due-webapps-at-once-quando-sviluppo-con-maven-eclisse). Questa domanda ha la buona risposta! (Da @Janning) – stolsvik

risposta

10

EDIT: Ho completamente modificato la mia prima risposta ora che ho una migliore comprensione delle aspettative del PO.

Check out Cargo, un involucro sottile che consente di manipolare i contenitori Java EE in modo standard.

In realtà, c'è un tutorial sul sito Web di Cargo che dimostra come utilizzare il plug-in Cargo Maven2 per avviare/arrestare automaticamente un contenitore (possibilmente distribuendo alcuni prodotti installabili all'avvio), che è ciò che stai cercando da quello che ho capito

Non sono sicuro che eseguire questa operazione dalla directory principale sia fattibile e se è un requisito o se sarebbe opportuno eseguirlo da un'altra directory. Tornerò su questo più tardi. Diamo prima un'occhiata all'impostazione del plugin Cargo Maven2.

Nel tuo caso, si può iniziare con la configurazione minima (che utilizza Jetty 5.x che è contenitore predefinito di Cargo):

[...] 
<build> 
    <plugins> 
    <plugin> 
     <groupId>org.codehaus.cargo</groupId> 
     <artifactId>cargo-maven2-plugin</artifactId> 
    </plugin> 
    </plugins> 
</build> 
[...] 

Se si desidera utilizzare Jetty 6.x, si dovrà specificare <containerId> e <type> nell'elemento <container>:

[...] 
<plugin> 
<groupId>org.codehaus.cargo</groupId> 
<artifactId>cargo-maven2-plugin</artifactId> 
<configuration> 
    <container> 
    <containerId>jetty6x</containerId> 
    <type>embedded</type> 
    </container> 
</configuration> 
</plugin> 
[...] 

Quindi, aggiungere i moduli che si desidera distribuire definendo deployables esplicitamente all'interno della configurazione del plugin (consultare la Maven2 Plugin Reference Guide per i dettagli della configurazione):

<deployables> 
    <deployable> 
    <groupId>com.mycompany.myproject</groupId> 
    <artifactId>myproject-alpha</artifactId> 
    <type>war</type> 
    <properties> 
     <context>optional alpha root context</context> 
    </properties> 
    </deployable> 
    <deployable> 
    <groupId>com.mycompany.myproject</groupId> 
    <artifactId>myproject-beta</artifactId> 
    <type>war</type> 
    <properties> 
     <context>optional beta root context</context> 
    </properties> 
    </deployable> 
    [...] 
</deployables> 

con questo, si dovrebbe essere in grado di avviare Jetty e hanno le webapps distribuiti su di esso con un semplice (per l'esecuzione del progetto che contiene la configurazione cargo plugin):

$ mvn cargo:start 

Non sono sicuro che questo può funzionare con il padre gen (mi chiedo se questo può portare a problemi di dipendenze cicliche) e non l'ho testato. Ma personalmente, metterei tutte queste cose nel pom di un progetto dedicato, ad es. in un progetto fratello delle tue webapps, e non nel padre pom. Non penso che sia davvero un grosso problema e questo è IMHO una configurazione migliore, soprattutto se si prevede di utilizzare il carico per integration testing.

+1

+1, ma considera un'aggiunta: se la configurazione nel genitore è impostata nella sezione pluginManagement, le webapp secondarie devono solo dichiarare il plug-in (come nel frammento di codice OPs) per la configurazione da ereditare. Questo evita problemi di ciclo. –

6

Forse questo link risolve il problema:

http://www.jiajia.eu/post/2008/10/08/Deploy-multiple-web-apps-with-maven-jetty-plugin.aspx .

il link qui sopra è rotto, ecco una nuova:

http://docs.codehaus.org/display/JETTY/Maven+Jetty+Plugin

Vedere la sezione "Esecuzione di più Webapps".

+0

+1 Questa soluzione utilizza il plug-in maven jetty per distribuire l'applicazione web "sorella" collegata come percorso relativo (../webapp2/target/webapp2.war) tramite jetty.xml, mantenendo comunque un ciclo di sviluppo rapido con hot-deploy -abilità per la webapp1. – Palimondo

+1

questo link non funziona. –

+0

La destinazione del collegamento originale non è più disponibile. Ho aggiunto un nuovo link. – Janning

Problemi correlati