2010-11-02 17 views
9

He creado algunos arquetipos para un proyecto que funciona bien por ahora, pero me gustaría poder verificar que el código generado a partir de los arquetipos continúe funcionando en el futuro.¿Cómo puedo probar un arquetipo maven que acabo de crear?

Lo que me gustaría es una fase de la compilación de arquetipo que toma el arquetipo recién creado, ejecuta mvn archetype:generate en él, y luego ejecuta mvn verify en el código generado para verificar que el código generado sea realmente correcto. Si es necesario escribiré mi propio mojo para hacer esto, pero quería ver si ya existe una solución. Veo el objetivo archetype:integration-test, pero no parece hacer lo que quiero.

Respuesta

12

ACTUALIZACIÓN 2013: Esta es ahora mucho más fácil que las otras respuestas sugieren.

http://jira.codehaus.org/browse/ARCHETYPE-334 se completó en 2011 ago

Para usarlo, basta con colocar la palabra install dentro del archivo goal.txt se mencionó anteriormente, y las pruebas del proyecto que está archetyping se invocará como parte de una construcción normal. (Y/o verify en el caso de la OP.)

Sin embargo, si empiezan a tomar arquetipos tenga en cuenta que this popular mini-guide está fuera de fecha y, mientras se va a trabajar para hacer un arquetipo que se no trabajo para tener pruebas de integración de arquetipo se ejecutan. En su lugar, debería crear un archivo archetype-metadata.xml como se describe en here. (Esto es mucho más agradable para trabajar con, así, ya que utiliza conjuntos de archivos!)

También tenga en cuenta estas pruebas de integración no responden a -DskipTests pero esto se puede solucionar de la siguiente manera:

<build> 
    <plugins> 

    <plugin> 
     <artifactId>maven-archetype-plugin</artifactId> 
     <version>2.2</version> 
     <configuration> 
     <skip>${skipTests}</skip> 
     </configuration>   
    </plugin> 

    </plugins> 
</build> 

(Aunque esto ve como se salta todo el plug-in, lo que realmente funciona, probablemente debido a que cae de nuevo a un modo de herencia;., mientras que no pude encontrar ninguna manera exitosa saltar sólo la ejecución integration-test objetivo utilizando el código de seguridad)

+0

El único problema con este enfoque es que parece que solo puede hacer un objetivo en lugar de múltiple (por ejemplo, instalar el sitio) –

+1

Esta respuesta sería más útil si incluía el ejemplo del archivo goal.txt, ya que ahora lo que está "arriba" está debajo . – Lucas

0

Supongo que sería un escenario para un servidor de integración continua como hudson.

Se podría definir un trabajo que

  1. se vacía un directorio (shell script)
  2. crea un nuevo proyecto basado en el arquetipo (arquetipo mvn: generar)
  3. se ejecuta el proyecto (mvn package)

Si bien esto podría probablemente de alguna manera se encajan en una experta en el ciclo de vida, que se siente un lío terrible. Use CI en su lugar.

+1

Esto funcionaría, pero creo que es una solución alternativa. El problema es que no sabría que mi código de plantilla se rompió hasta después de que se cometió, algo que preferiría evitar.Además, invocar maven dentro de maven es exactamente lo que hace el maven-release-plugin, por lo que esto no es algo inusual. – mes5k

0

Veo el objetivo archetype: integration-test, pero no parece estar haciendo lo que quiero.

A menos que no he entendido bien lo desea, el objetivo archetype:integration-test parece ser una muy buena solución:

Ejecutar la integración arquetipo pruebas, que consiste en una creación de un proyecto de los actuales arquetipo con propiedades definidas y opcionales comparación con copia de referencia. Un TI consiste en un directorio en el src/test/resources/proyectos que contienen:

  • goal.txt (contenido en realidad no se utiliza, pero la versión futura debe interpretarlo como un objetivo para funcionar en contra de la generada proyecto: ver arquetipo-334),
  • archetype.properties con propiedades para la generación de proyectos,
  • referencia/directorio opcional que contiene una copia de referencia del proyecto se espera creado a partir de la TI.

De acuerdo con la descripción anterior, esta metas permite precisamente para ejecutar la prueba (s) de integración para comprobar un proyecto generado con el arquetipo actual frente a un resultado esperado y esto se ve como una forma limpia, simple, autónomo para probar un arquetipo.

¿Por qué este enfoque no es satisfactorio? ¿Qué me perdí?

+0

El arquetipo: integración-prueba en realidad no construye ni prueba el código generado, que es lo que quiero. De eso es de lo que ahora me doy cuenta que se trata la característica 334. – mes5k

+0

@ mes5k: Ahhhhh, creo que entiendo * ahora * lo que quiere hacer, es decir, ejecutar pruebas del proyecto generado. Eso no estaba claro para mí en la pregunta original. –

1

para responder a mi propia pregunta, la función de "oficial" está en desarrollo:

http://jira.codehaus.org/browse/ARCHETYPE-334

Mientras tanto, este enlace proporciona una solución mediante el experto-invocador-plugin:

http://maven.40175.n5.nabble.com/unit-testing-archetypes-td75257.html#a75257

+0

Es posible que desee eliminar esta respuesta, o señalar, o aceptar, la respuesta de Cloudy en parte, ya que la característica se ha implementado desde entonces. – Eyal

3

Además del enfoque de usar maven-invoker-plugin, estamos utilizando un enfoque diferente. Con la ayuda de Maven Verifier puede probar fácilmente sus plugins y arquetipos maven. Apenas añada la siguiente dependencia en su pom de su proyecto de prueba experta:

<dependency>         
    <groupId>org.apache.maven.shared</groupId> 
    <artifactId>maven-verifier</artifactId> 
    <version>1.2</version>      
</dependency>        

Ahora usted es capaz de utilizar

org.apache.maven.it.Verifier 

en sus pruebas JUnit normales. Con el verificador puede ejecutar objetivos de experto y algunas afirmaciones sobre el resultado. Para un ejemplo completo sólo echa un vistazo a los módulos Maven ensayo de la integración de nuestros Javascript-arquetipos: https://github.com/akquinet/javascript-archetypes

2

estaba luchando un poco con esto yo mismo, y pensé que cuando se usa v2.3 actual del maven-archetype-plugin, además de src/test/resources/projects/first/goal.txt, también se necesita una src/test/resources/projects/first/archetype.properties que contenga algo como esto:

sourceEncoding=UTF-8 
groupId=integrationtest.group 
artifactId=integrationtest.artifactId 
version=1.0.0-SNAPSHOT 
package=org.eclipse.xtend.xtend-archetype.integrationtest 
packageInPathFormat=org/eclipse/xtend/xtend-archetype/integrationtest 

This pull request ilustra un ejemplo de trabajo completa.

+0

Parece que no puedo hacer que esto funcione. ¿Necesita hacer más que agregar los archivos? Esperaba que el arquetipo ejecutara la prueba de integración durante '' mvn clean compile'' pero parece omitirlos por completo. – Lucas

+0

@Lucas funciona el ejemplo de trabajo completo vinculado anteriormente. Si yo fuera tú, simplemente miraría a mi alrededor, p. en GitHub, para otros ejemplos, ¡y estoy seguro de que lo entenderás! – vorburger

+0

Terminé obteniendo algo que funciona, sin embargo tuve que agregar el '' '' al arquetipo '' integration-test'' objetivo que no estoy seguro si eso es un síntoma de otro problema con maven no automáticamente ejecutando estas pruebas ¿Cómo se suele invocar estas pruebas? Maven parece ignorar por completo mi archivo '' goals.txt''. Había migrado mi arquetipo para usar '' archetype-metadata.xml'' sobre '' archetype.xml'' y eso no parece haber hecho la diferencia. – Lucas

Cuestiones relacionadas