2011-05-09 12 views
7

En Maven, ¿es posible refactorizar fragmentos comúnmente repetidos en una "biblioteca" reutilizable (complemento)? Me doy cuenta de que puedo escribir mis propios complementos, pero a menudo la funcionalidad que quiero reutilizar ya está expresada como fragmentos en un pom.xml, y mi inclinación natural es que el mecanismo de reutilización debe conservar esos fragmentos como XML.¿Se puede refactorizar los archivos Maven pom.xml en fragmentos XML reutilizables?

El caso en cuestión He estado usando un procedimiento (partly described here) para generar un archivo WADL desde el código fuente Jersey/JAX-RS, y luego generar documentación para desarrolladores de ese WADL y la propia Javadoc del código fuente. El procedimiento en esa página describe la ejecución de dos complementos, y estoy usando un tercer complemento (org.codehaus.mojo: exec-xsltproc) y mi propio archivo XSL para convertir el WADL en HTML.

He utilizado este procedimiento en varios proyectos de Maven. La plantilla viene en 100 lines of XML. Lo que cambia entre proyectos es simplemente el nombre del paquete del código fuente en cuestión (com.example.myapp.rest en la plantilla repetida). Por lo tanto, no es posible mover esto a un pom principal, o cualquier otro mecanismo que no permita la parametrización.

Lo que deseo es agregar, excluir plantilla o refactorizar esas 100 líneas (y un archivo XST) en una ubicación común. Me doy cuenta de que las ejecuciones maven reutilizables se entregan a través de plugins Maven. Idealmente, no tendría que escribir ningún Java (o Groovy) solo para volver a expresar lo que ya he expresado en XML.

¿Es posible refactorizar los archivos de Maven pom.xml como XML?

Respuesta

4

Tiene razón al decir que esto no es tan fácil como debería ser. "mixins" - que describen exactamente esta capacidad - han estado en la hoja de ruta de Maven por algún tiempo.

Puede usar un POM principal para compartirlos, suponiendo que todos esos proyectos comparten un antecesor común. Puede configurar solo el elemento diferente y se combinará con el resto, o alternativamente puede asignarle un valor de propiedad que esté definido donde se usa. Entiendo que, en general, esto no es apropiado para este caso de uso ya que el padre describe la estructura en lugar del tipo de proyecto.

Otra alternativa es crear un arquetipo para dicho proyecto. Esto le permite definirlo una vez y generar nuevos proyectos, pero no es algo reutilizado directamente.

Por ahora, la mejor solución es probablemente un complemento personalizado: creo que esta fue la inspiración para que Don Brown escribiera el complemento mojo-executor, que ahora vive en: https://github.com/TimMoore/mojo-executor. Pero sí, entonces necesitas Java/Groovy :)

1

Probablemente se podría crear un proyecto pom-solamente, agregar esos 100 líneas allí, y heredar en sus proyectos a través de la etiqueta > < padres ..

+0

Este es un enfoque viable en el pequeño (que insinué en la pregunta). La desventaja es que solo puedes hacer esto una vez; por ejemplo, no puedes componer juntos varios padres. –

+1

Podría crear una jerarquía de encadenamiento ... que sería un poco desordenada, pero debería funcionar. parent1-> parent2-> parent3-> su módulo – mglauche

2

Al igual que con la mayoría de los problemas que se enfrentará en su Maven viaje, la respuesta es Ant.

Cree un script de compilación Ant que haga exactamente lo que usted desea, luego llámelo a través del maven-antrun-plugin.

Dado que todas las propiedades disponibles para maven también están disponibles en la configuración de destino, puede configurar el script de construcción mediante las propiedades de maven.

Maven: 0, Ant: 1.

QED.

+0

Su enfoque no permite el uso de plugins Maven existentes (como en el ejemplo anterior), ¿verdad? –

+0

¿Puedes cambiar esos 3 complementos maven por las tareas equivalentes de Ant? – npellow

Cuestiones relacionadas