2012-06-08 13 views
7

Tengo un POM de maven que me gustaría utilizar como plantilla, produciendo artefactos con diferentes nombres según los argumentos que le transmita. Pero no puedo encontrar la manera de especificar el artifactId en tiempo de ejecución.¿puedo especificar un proyecto maven.artifactId en tiempo de ejecución?

Si parametrizar el elemento <artifactId> así:

<artifact>foo-${bar}</artifact> 

experto se queja:

[ADVERTENCIA] 'artifactId' contiene una expresión, pero debe ser una constante.

Si dejo a cabo <artifactId> en el POM y tratar de especificar en la línea de comandos con

mvn -Dproject.artifactId=foo ... 

experto se queja:

[ERROR] 'artifactId' no se encuentra.

¿Hay otro truco que podría usar para lograr esto, además de recurrir a generar el archivo POM sobre la marcha desde una plantilla? [Hmm, tal vez podría hacer eso usando el filtro de recursos de maven ...]

Respuesta

5

Si lo hago bien, quieres volver a utilizar una aplicación maven blueprint y poder cambiar el artifactId.

Este caso de uso se puede realizar mejor con arquetipos Maven. Ver this to get you started. Es bastante sencillo y vale la pena aprender. Tiene su proyecto normal de Maven y agrega variables como ${groupId} en su pomo de diseño. A continuación, se reemplazan por los parámetros dados por usted en la generación arquetipo:

mvn archetype:generate         \ 
-DarchetypeGroupId=<archetype-groupId>    \ 
-DarchetypeArtifactId=<archetype-artifactId>   \ 
-DarchetypeVersion=<archetype-version>    \ 
-DgroupId=<my.groupid>        \ 
-DartifactId=<my-artifactId> 

También hay una gran cantidad de arquetipos creados por la gente en GitHub donde se puede aprender más acerca de la estructuración y filtrado en arquetipos Maven For example.

Como alternativa, puede intentar configurar el filtro de Maven sin utilizar el sistema de arquetipo, pero no tengo experiencia en eso. No creo que pueda ejecutar un proyecto sin un artefacto válido, alguna generación debe suceder antes (como generar un arquetipo) pero no estoy seguro.

+0

Gracias, esto parece una buena opción. Parece que todas las preguntas de maven tienen una respuesta del formulario "hay un complemento para eso" :-). Sospecho que mi idea de usar el filtro maven habría terminado siendo una especie de arquetipo de un pobre, por lo que tiene sentido ir con algo probado en lugar de reinventar la rueda. –

+0

Estoy de acuerdo en que los arquetipos son el camino a seguir, pero en realidad no responde la pregunta. Incluso si es una práctica totalmente mala, ¿es posible configurar el artifactId en tiempo de ejecución? – dokaspar

0

Va contra un principio de maven que es que un pom supuestamente representa un proyecto autónomo que genera un artefacto estable (es decir, evita compilaciones paramétricas que no se pueden reproducir fácilmente).

Si eso es realmente lo que quiere, usaría maven-install-plugin como paso del ciclo de vida (y específicamente install-file) y lo parametrizaría en vez de intentar parametrizar el artifactId del propio pom.

+0

Gracias por los comentarios. Mi compilación ya está parametrizada (y maven no parece desalentar esto demasiado, teniendo en cuenta su soporte integrado para obtener propiedades de la línea de comandos, el entorno, etc.). Pero estoy admitiendo que soy un novato maven.Lo que tengo que hacer es tomar un proyecto de "fábrica" ​​y construir muchas variaciones que difieran solo ligeramente, produciendo artefactos diferentes. Echaré un vistazo al archivo de instalación. –

Cuestiones relacionadas