resource pom plugin exclude example resources copy maven surefire

resources - pom - Maven(surefire): copie los recursos de prueba de src/test/java



resources build maven (4)

El plugin de Maven Safefire (testing) copia archivos en src / test / resources para target / test-classes. Compila .java en src / test / java y copia los archivos .class compilados en target / test-classes.

Pero no copia recursos de src / test / java, y es más conveniente poder poner recursos de prueba en el mismo directorio que las clases .java para las que son recursos, que en una jerarquía paralela en src / test / resources .

¿Es posible hacer que maven copie recursos de src / test / java?


¿Es posible hacer que maven copie recursos de src / test / java?

Sí, esto se logra fácilmente con el plugin antrun .


La única forma en que funcionó para mí cuando puse mi configuración de prueba en la carpeta src / test / resources (análogo de src / test / java para los archivos fuente). Los archivos de esta carpeta se copian a la carpeta target / test-classes que se encuentra en el classpath durante la ejecución de las pruebas. No sé por qué, pero la siguiente configuración no funcionó para mí:

<testResources> <testResource> <directory>${project.basedir}/src/test/java</directory> <excludes> <exclude>**/*.java</exclude> </excludes> </testResource> <testResource> <directory>${project.basedir}/src/test/resources</directory> </testResource> </testResources>



bmargulies dio la respuesta, pero déjame completar algunos detalles.

<testresources> se puede agregar al nodo <build> del POM maven, así:

<testResources> <testResource> <directory>${project.basedir}/src/test/java</directory> </testResource> </testResources>

Eso copia todo en src / test / java, incluido el código fuente .java, que no queremos.

También (como los bmargulios solo insinuados) anula y reemplaza la configuración predeterminada <testResources> en el POM padre estándar del que heredan todos los otros POM (a menos que esa herencia se cambie). El padre estándar copia src / test / resources, por lo que al anular eso, no lo copiamos como de costumbre, lo que no queremos. (En particular, mi razón principal para hacer esto es usar unitils, que quiere copiar el archivo unitils.properties, y eso es (para mí, de todos modos) en src / test / resources.

Entonces, volvemos a agregar src / test / resources:

<testResources> <testResource> <directory>${project.basedir}/src/test/java</directory> </testResource> <testResource> <directory>${project.basedir}/src/test/resources</directory> </testResource> </testResources>

Eso copia en el orden indicado, de modo que para los archivos que existen tanto en / src / test / java (y subdirectorios) como en / src / test / resources (y subdirectorios), la versión src / test / resources es la que termina arriba en las clases de prueba.

Ahora solo necesitamos no copiar los archivos .java:

<testResources> <testResource> <directory>${project.basedir}/src/test/java</directory> <excludes> <exclude>**/*.java</exclude> </excludes> </testResource> <testResource> <directory>${project.basedir}/src/test/resources</directory> </testResource> </testResources>