2009-03-12 8 views
18

J'ai un ensemble d'applications Web que je gère que j'essaie de déplacer vers maven.Comment déployer plusieurs webapps homologues à partir d'un pom parent

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

chacun des webapps fait référence à la pom-mère, et ils ont tous deux actuellement un plugin Maven de la jetée qui fonctionne.

Ma question est comment puis-je monter chacune des webapps du pom parent de telle sorte que mvn jetty: run fonctionne dans le répertoire parent?

modifier à anwer: Pascal T Le problème n'est pas tellement que j'obtiens une erreur lorsque j'essaie d'exécuter la commande à partir de la racine pom, mais que je ne suis pas sûr de savoir comment le configurer.

par exemple le webapp1/pom.xml ressemble:

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

changer dans ce répertoire et en tapant jetée mvn: course fonctionne très bien et me donne la possibilité de frapper: http://localhost:8080/webapp1. Cependant, ce que je voudrais serait d'être dans le parent de webapp1, et d'exécuter toutes les 'n' webapps du répertoire parent. Ayant ainsi http://localhost:8080/webapp1, et http://localhost:8080/webapp2 disponible avec un paramètre de ligne de commande.

btw, si la réponse impliquait un plugin tomcat, ce serait bien.

+0

Je comprends mieux ce que vous voulez faire et ai édité ma réponse initiale –

+0

Même question que [Possible d'exécuter deux webapp à la fois lors du développement avec Maven/Eclipse?] (Http://stackoverflow.com/questions/5519066/ possible-pour-exécuter-deux-webapps-at-once-when-development-with-maven-eclipse). Cette question a la bonne réponse! (De @Janning) – stolsvik

Répondre

10

EDIT: J'ai totalement modifié ma première réponse maintenant que j'ai une meilleure compréhension des attentes de l'OP.

Découvrez Cargo, une enveloppe fine qui vous permet de manipuler des conteneurs Java EE de manière standard.

En fait, il y a un tutorial sur le site Web de Cargo qui montre comment utiliser le plugin Cargo Maven2 pour démarrer/arrêter automatiquement un conteneur (en déployant éventuellement des déployables au démarrage), comme vous le souhaitez ce que j'ai compris.

Je ne suis pas sûr que cela soit possible à partir du répertoire parent et si c'est une exigence ou si cela serait acceptable de le faire depuis un autre répertoire. Je reviendrai plus tard. Jetons d'abord un coup d'oeil à la configuration du plugin Cargo Maven2.

Dans votre cas, vous pouvez commencer avec la configuration minimale (qui utilise la jetée 5.x qui est le conteneur par défaut Cargo):

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

Si vous souhaitez utiliser la jetée 6.x, vous devrez spécifier <containerId> et <type> dans l'élément <container>:

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

Ensuite, ajoutez les modules que vous souhaitez déployer en définissant déployables explicitement dans la configuration du plugin (voir la Maven2 Plugin Reference Guide pour les détails de la configuration):

<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> 

avec cela, vous devriez être en mesure de commencer la jetée et ont vos webapps déployées sur elle avec un simple (pour exécuter du projet contenant la configuration du plugin cargo):Je ne suis pas sûr que cela puisse fonctionner avec le parent pom (je me demande si cela peut conduire à des problèmes de dépendances cycliques) et je ne l'ai pas testé. Mais personnellement, je mettrais toutes ces choses dans le pom d'un projet dédié, par ex. dans un projet frère de vos webapps, et non dans le pom parent. Je ne pense pas que c'est vraiment un gros problème et c'est une meilleure configuration à mon humble avis, surtout si vous prévoyez d'utiliser la cargaison pour integration testing.

+1

+1, mais considérons un ajout: si la configuration dans le parent est définie dans la section pluginManagement, les webapps enfants n'ont qu'à déclarer le plugin (comme dans l'extrait de code OP) pour que la configuration soit héritée. Cela évite tout problème de cycle. –

6

Peut-être que ce lien permet de résoudre votre problème:

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

le lien ci-dessus est cassé, donc voici une nouvelle:

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

Voir la section "Exécution webapps multiples".

+0

+1 Cette solution utilise le plugin maven jetty pour déployer l'application web "soeur" liée en tant que chemin relatif (../webapp2/target/webapp2.war) via jetty.xml, tout en conservant un cycle de développement rapide avec un déploiement à chaud. -capacité pour le webapp1. – Palimondo

+1

ce lien ne fonctionne pas. –

+0

La cible du lien d'origine n'est plus disponible. J'ai ajouté un nouveau lien. – Janning

Questions connexes