2010-02-11 14 views
39

hay una solución clara para compartir el código de prueba común entre los proyectos de Maven usando test-jar objetivo de maven-jar-plugin plug-in (ver here).recursos Compartir prueba entre experta en proyectos

Necesito hacer algo similar con los recursos de prueba, en particular, quiero que los recursos de prueba del proyecto A estén disponibles en el classpath del proyecto B durante la prueba.

Para el proyecto A uno necesita declarar:

<!-- Package and attach test resources to the list of artifacts: --> 
<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-antrun-plugin</artifactId> 
    <executions> 
     <execution> 
      <phase>package</phase> 
      <goals> 
       <goal>run</goal> 
      </goals> 
      <configuration> 
       <tasks> 
        <jar destfile="${project.build.directory}/test-resources.jar"> 
         <fileset dir="${project.basedir}/test-resources" /> 
        </jar> 
       </tasks> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 
<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>build-helper-maven-plugin</artifactId> 
    <executions> 
     <execution> 
      <phase>package</phase> 
      <goals> 
       <goal>attach-artifact</goal> 
      </goals> 
      <configuration> 
       <artifacts> 
        <artifact> 
         <file>${project.build.directory}/test-resources.jar</file> 
         <type>jar</type> 
         <classifier>test-resources</classifier> 
        </artifact> 
       </artifacts> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

Y en el proyecto B será la dependencia de la normalidad:

<dependency> 
    <groupId>myproject.groupId</groupId> 
    <artifactId>myartifact</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <classifier>test-resources</classifier> 
    <scope>test</scope> 
</dependency> 

Pregunta: ¿Debería trabajar en todos los casos? ¿Es posible empacar recursos sin maven-antrun-plugin (usando más plugin 'ligero')?

+0

Parece que hay una necesidad de mejorar el plugin de recursos remotos para recursos de prueba - http://maven.apache.org/plugins/maven-remote-resources-plugin/index.html – cetnar

+0

@centar: gracias por la interesante información del plugin, aunque, lo que dijiste es un poco offtopic :) –

Respuesta

33

Simplemente use jar:test-jar y declare el JAR resultante como una dependencia (consulte this guide para obtener más información). Y mientras que no entiendo el problema de tener recursos y clases en este frasco, siempre se puede excluir todos los archivos .class:

<project> 
    <build> 
    <plugins> 
    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-jar-plugin</artifactId> 
     <version>2.2</version> 
     <executions> 
     <execution> 
      <goals> 
      <goal>test-jar</goal> 
      </goals> 
     </execution> 
     </executions> 
     <configuration> 
     <excludes> 
      <exclude>**/*.class</exclude> 
     </excludes> 
     </configuration> 
    </plugin> 
    </plugins> 
    </build> 
</project> 

y utilizarlo:

<project> 
    ... 
    <dependencies> 
    <dependency> 
     <groupId>com.myco.app</groupId> 
     <artifactId>foo</artifactId> 
     <version>1.0-SNAPSHOT</version> 
     <type>test-jar</type> 
     <scope>test</scope> 
    </dependency> 
    </dependencies> 
    ... 
</project> 
+0

¿No debería la fase de ejecución establecerse en paquete? – sal

+1

@sal Es porque 'jar: test-jar' *" se une por defecto a la fase del ciclo de vida: 'paquete'." * –

+0

@Pascal: Gracias por la pista. Estoy de acuerdo, tiene sentido empacar recursos con clases. Sin embargo, como respuesta a +1, no se respondieron las preguntas originales (¿cómo agrupar los recursos de prueba por separado de la manera más óptima?). –

0

Ya existe un objetivo para construir un test jar de maven.

Suponiendo que necesita algo un poco más flexible, puede usar el plugin jar para empaquetar sus recursos de prueba y ejecutar ese objetivo con el objetivo del paquete principal con algo como esto.

 <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-jar-plugin</artifactId> 
     <executions> 
      <execution> 
      <phase>package</phase> 
      <goals> 
       <goal>jar</goal> 
      </goals> 
      <configuration> 
       <classifier>test-resources</classifier> 
       <includes> 
       <include>**/*.whatever-you-want</include> 
       </includes> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 

lo que quieras abrigado se añadiría al proyecto-nombre-versión-test-resources.jar cuando el objetivo está dirigido frasco.

Podría incluirlo en un proyecto a través de la misma dependencia que utiliza anteriormente.

+0

Al ejecutar el objetivo 'jar' se une automáticamente' maven-jar-plugin' a las "clases d irectory ", no" directorio de clases de prueba ". Por lo tanto, el paquete incluirá simplemente clases normales, y 'incluir' no ayudará a todos los recursos de prueba del artefacto. Lo siento, pero "-1". –

Cuestiones relacionadas