2009-03-12 13 views
18

Tengo un conjunto de aplicaciones web que administro y que trato de trasladar a maven.¿Cómo despliegue varias aplicaciones web de igual a igual desde un pom principal?

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

cada una de las aplicaciones web se refiere a la pom padre, y ambos tienen actualmente un plugin Maven embarcadero que funciona.

Mi pregunta es ¿cómo puedo montar cada una de las aplicaciones web desde el pom padre de modo que mvn embarcadero: ejecutar funciona en el directorio principal?

edit to anwer: Pascal T El problema no es tanto que me sale un error cuando intento ejecutar el comando desde la raíz pom, pero no estoy seguro de cómo configurarlo.

por ejemplo, el webapp1/pom.xml parece:

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

cambiar a este directorio de amarre y escribiendo mvn: run trabaja muy bien y me ofrece la capacidad de golpear: http://localhost:8080/webapp1.

Sin embargo, lo que me gustaría sería estar en el padre de webapp1, y ejecutar todas las 'n' webapps del directorio principal. Por lo tanto, tiene http://localhost:8080/webapp1 y http://localhost:8080/webapp2 disponibles con un parámetro de línea de comando.

Por cierto, si la respuesta involucra un plugin tomcat, estaría bien.

+0

Entiendo mejor lo que quiere hacer y he editado mi respuesta inicial –

+0

¿La misma pregunta que [Es posible ejecutar dos aplicaciones simultáneas al desarrollar con Maven/Eclipse?] (Http://stackoverflow.com/questions/5519066/ possible-to-run-two-webapps-at-once-when-developing-with-maven-eclipse). Esta pregunta tiene la buena respuesta! (De @Janning) – stolsvik

Respuesta

10

EDIT: He editado por completo mi primera respuesta ahora que tengo una mejor comprensión de las expectativas del OP.

Consulte Cargo, una envoltura delgada que le permite manipular contenedores Java EE de forma estándar.

En realidad, hay un tutorial en el sitio web de Cargo que muestra cómo usar el complemento Cargo Maven2 para iniciar/detener automáticamente un contenedor (posiblemente desplegando algunos dispositivos desplegables cuando se inicia), que es lo que está buscando desde lo que he entendido.

No estoy seguro de poder hacer esto desde el directorio principal es factible y si es un requisito o si estaría bien hacerlo desde otro directorio. Volveré sobre esto más tarde. Primero echemos un vistazo a la configuración del plugin Cargo Maven2.

En su caso, usted puede comenzar con la configuración mínima (que utiliza embarcadero 5.x que es contenedor predeterminado de carga):

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

Si desea utilizar el embarcadero 6.x, se le tiene que especificar <containerId><type> y en el elemento <container>:

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

A continuación, añadir los módulos que desea implementar mediante la definición de deployables explícitamente dentro de la configuración del complemento (consulte la Maven2 Plugin Reference Guide para los detalles de la configuración):

<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 esto, usted debe ser capaz de iniciar embarcadero y tienen sus aplicaciones web implementada en ella con un simple (a contar desde el proyecto que contiene la configuración del plugin de carga):

$ mvn cargo:start 

yo no estoy seguro de que esto se puede trabajar con el pom del padre (me pregunto si esto puede conducir a problemas de dependencias cíclicas) y yo no probarlo. Pero personalmente, pondría todas estas cosas en el pomo de un proyecto dedicado, p. en un proyecto hermano de tus webapps, y no en el pom padre. No creo que sea realmente un gran problema, y ​​en mi humilde opinión es una mejor configuración, especialmente si planeas usar carga para integration testing.

+1

+1, pero considere una adición: si la configuración en el elemento primario está configurada en la sección pluginManagement, las aplicaciones secundarias solo necesitan declarar el complemento (como en el fragmento de código OPs) para que la configuración se herede. Esto evita cualquier problema de ciclo. –

6

Tal vez este enlace resuelve su problema:

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

el enlace anterior se rompe, por lo que aquí es una nueva:

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

Véase la sección "Ejecución Webapps múltiple".

+0

+1 Esta solución utiliza el complemento maven embarcadero para implementar la aplicación web "hermana" enlazada como ruta relativa (../webapp2/target/webapp2.war) a través de embarcadero.xml, al tiempo que conserva el ciclo de desarrollo rápido con implementación en caliente - capacidad para la aplicación web1. – Palimondo

+1

este enlace no funciona. –

+0

El destino del enlace original ya no está disponible. Agregué un nuevo enlace. – Janning