2011-09-12 15 views
6

Tengo un proyecto de varios módulos en maven, donde otros proyectos necesitan utilizar los frascos de acuerdo con el entorno.Comportamiento de Maven if-else

Tenemos como 4 enviroenments 1.Dev 2.UAT 3.QA 4.PROD

Hay un proyecto que quiere usar projectname-dev.jar para los tres entornos (es decir, dev, uat, QA) y projectname-prod.jar para PROD.

Hice una búsqueda en google de algo así como una lógica if-else que puedo usar en los perfiles de maven.

Todavía puedo crear una nueva propiedad para este proyecto específico y cambiarla a '-prod' cuando entra en producción, pero eso es una sobrecarga adicional que no quiero agregar.

¿Hay algún complemento que pueda usar para esto que me ayude a realizar el trabajo anterior sin agregarle ningún tipo de sobrecarga manual?

Gracias

+3

Solo correría maven en desarrollo. Yo usaría maven para hacer un lanzamiento y su lanzamiento lo usaría ** sin cambios ** en UAT, QA y PROD. Si hay diferencias de configuración entre los entornos, los mantendría por separado. –

+0

El problema aquí sería que una organización donde hay tres equipos dedicados al desarrollo, uat y qa respectivamente, dependería de un tipo para crear sus compilaciones. :) – Neeraj

+1

Tendría un servidor de integración continuo, p. hudson y que alguien pueda realizar el lanzamiento (con instrucciones). El problema que tienes es que UAT y QA podrían construir algo casi, pero no exactamente igual a DEV. Y que algo diferente vuelva a la producción. –

Respuesta

7

¿No es lo que Maven profiles están destinadas a hacer? Puede definir diferentes valores de propiedad en diferentes perfiles y luego activar uno de ellos al realizar una compilación.

+0

Id en lugar de crear un nuevo perfil, preferiría crear una nueva propiedad, y pasar la propiedad a maven cuando la construyo usando -Denv = 'myenv'. Así es como idealmente se hacen los entornos y las compilaciones específicas de enriquecimiento en maven – Neeraj

+0

No estoy de acuerdo contigo @Neeraj. axtavt es bastante correcto al recomendar el uso de perfiles. En el perfil puedes especificar tantas propiedades como desees específicas para ese tipo de compilación. Mucho más flexible que la definición de cada propiedad en la línea de comandos –

0

No es exactamente lo que está buscando, pero no debería crear artefactos específicos del entorno. Contrariamente a la opinión popular, este es un terrible mal uso de los perfiles de Maven. Debes construir un artefacto que sea adecuado para cualquier entorno. La configuración del artefacto, que es externa al artefacto, es lo que es específico de cada entorno.

+0

Sí, estoy totalmente de acuerdo contigo. En lugar de crear 4 perfiles diferentes, los artefactos deben tener una configuración para cada entorno y eso es exactamente lo que estoy buscando aquí. – Neeraj

+0

Entonces quizás no comprendamos lo que está pidiendo porque parece que está buscando una forma de ejecutar condicionalmente una construcción maven dirigida a diferentes entornos. Lo más probable es que deba hacer algo como hacer que Maven cree su artefacto y usar el [plugin de ensamblaje] (http://maven.apache.org/plugins/maven-assembly-plugin/) para agrupar el artefacto junto con múltiples configuraciones de entorno diferentes. en un archivo zip. –

+0

Es muy común almacenar la configuración de db en un archivo war. ¿Cómo configurar esto para dev, prod sin tener artefactos diferentes para cada entorno de compilación? –