Pregunta

Tengo siguientes proyectos Maven creados:

  • PM-Core
  • PM-Web (con una dependencia de PM-Core)
Ahora, este proyecto se utiliza para varios clientes, pero para cada cliente hay algunas pequeñas diferencias:. Principalmente las diferencias en los archivos de configuración, pero algunos clientes también requieren archivos de Java adicionales (que no se pueda instalar para los demás clientes)

He estado considerando varias alternativas sobre cómo apoyar esto con Maven, pero todavía estoy buscando la solución perfecta.

La mejor solución que se me ocurre es la creación de un proyecto experto independiente para cada cliente (por ejemplo, PM-CLIENTE1, ...), que contiene los archivos de configuración sólo el cliente específico y archivos de Java adicionales o de JSP, .... El siguiente paso sería considerar el proyecto PM-Web y el proyecto de cliente como uno proyecto web, es decir: tienen ellos combinados (envasados) en 1 archivo de la guerra con los archivos del proyecto de cliente que tiene precedencia sobre los archivos del proyecto PM-Web <. / p>

Más concreto:. mvn package corriendo en PM-Cliente1 tomaría todo de PM-Web, añadir / reemplazar los archivos de PM-Cliente1 y luego empaquetar esto en una sola guerra

Así que la pregunta es: ¿cómo lograr esto con Maven

¿Fue útil?

Solución

Sí, esto se puede hacer usando superposiciones . La muestra en la página web es exactamente lo que está hablando.

En la estructura del proyecto, que podría tener algo como esto:

.
|-- PM-Core
|-- PM-WebCommon (of type war, depends on core)
|-- PM-Client1 (of type war, depends on webcommon)
`-- PM-Client2 (of type war, depends on webcommon)

Y el uso de superposición de PM-Cliente1 y PM-Cliente2 de "fusionar" con PM-WebCommon y guerras de paquetes para cada cliente.

Actualizar No voy a cubrir todos los detalles, pero creo que la declaración de la dependencia de la guerra con un alcance de tipo runtime es necesaria para utilizar superposición, esta es la forma de superposición no funciona (en realidad, el conjunto lo superposición es una especie de truco). Ahora, para resolver su problema de eclipse, una solución podría ser la creación de un archivo JAR que contiene las clases del proyecto PM-WebCommon. Para ello, utilice el attachClasses opcional parámetro y configurarlo para true. Esto le dirá experto para crear un PM-WebCommon-<version>-classes.jar que a continuación, será capaz de declarar como dependencia de PM-Cliente1 (con un alcance provided). Para los detalles, echar un vistazo a MWAR-73 y MWAR-131 . Esto también se discute en la FAQ de la guerra enchufar. Tenga en cuenta que esto no es una práctica recomendada, de la manera correcta sería la de mover las clases a un módulo separado (y esta es la otra solución que quería mencionar).

Actualizar (201001018): Yo he probado el parámetro attachClasses y funciona con la versión 2.1-beta-1 de la plugin.

Otros consejos

Se puede usar perfiles ver http://maven.apache.org/guides/ Mini / guía-edificio-para-diferente-environments.html y utilizar clasificadores para distinguir entre los artefactos de las diferentes construcciones de la misma versión. En esta configuración, se puede crear módulos opcionales adicionales para cada uno de sus clientes personalizaciones específicas en el marco del proyecto principal, es decir
+ PM
++ PM-Core
++ PM-Web
++ PM-Cliente1
++ PM-Cliente2

O se podría contemplar la utilización de usar la Maven plugin de montaje

Comparación de las respuestas para la pregunta diferentes archivos WAR, compartir recursos .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top