java - proyecto - pom xml que es
¿Cómo incluyo o excluyo condicionalmente un archivo de un arquetipo cuando se genera un proyecto? (4)
Estoy creando arquetipos Maven 2 para nuestro proyecto (Weld). Me gustaría poder controlar qué archivos se colocan en el proyecto generado en función del valor de una propiedad que se define durante el archetype:generate
. Por ejemplo, preveo el siguiente mensaje:
Define value for groupId: : com.example
Define value for artifactId: : myproject
Define value for package: com.example: :
Define value for includeGradleSupport: : y
En función del valor de includeGradleSupport, quiero incluir (o no incluir) el archivo build.gradle
en el proyecto generado. Si el usuario no quiere la compatibilidad con Gradle, no quiero saturar el proyecto generado con archivos innecesarios.
Otro ejemplo es que podría necesitar proporcionar un fragmento web de Jetty (para activar un oyente) si el usuario quiere soporte de Jetty.
Se trata de la personalización del proyecto en función de lo que el desarrollador pretende utilizar. Si bien podría crear otro arquetipo completo, a veces los cambios son tan pequeños que sería más fácil incluir / excluir un archivo.
¿Hay alguna manera de controlar este comportamiento utilizando el descriptor archetype-metadata.xml
?
Puedo echar un vistazo a qué codificación tomaría para habilitar esto en el plugin de arquetipo.
Creo que el principal vehículo para hacer esto hoy sería producir condicionalmente dos artefactos de arquetipo diferentes durante la compilación original. El usuario del arquetipo usaría explícitamente yourarchetype -thingthing o yourarchetype -thingthing.
Sé que esto no es exactamente lo que buscas y estoy de acuerdo en que lo que estás pidiendo es un caso de uso sensato.
Si bien podría crear otro arquetipo completo, a veces los cambios son tan pequeños que sería más fácil incluir / excluir un archivo.
Esta frase me hizo pensar ...
Parece que tienes una estructura de proyecto predeterminada.
Supongamos que es grande, tiene muchos archivos. Por supuesto, no desea duplicar la lógica y los archivos en un arquetipo diferente.
Ahora, a veces, un proyecto tiene un comportamiento adicional (relacionado con Gradle).
Esto suena un caso de uso típico para otro arquetipo que no comienza de la nada, sino que viene después del primero. He visto varios ejemplos de tales arquetipos en la web. El desarrollador activa este arquetipo solo si el proyecto necesita Graddle. :-)
Así que sugiero: crea tu arquetipo de Graddle, que solo agrega los archivos relevantes para Graddle .
Personalmente movería las partes que pueden ser eliminadas / agregadas a pedido del usuario y las pondré en diferentes perfiles de maven para que pueda construir diferentes partes usando diferentes perfiles
Gracias por la información Dan!
Acabo de mirar el código fuente del complemento de arquetipo, y http://jira.codehaus.org/browse/ARCHETYPE-58 no parece haber resuelto este problema.
Acabo de crear http://jira.codehaus.org/browse/ARCHETYPE-424 para rastrearlo.