maven-2 - example - maven-resources-plugin version
Maven: copia archivos sin estructura de subdirectorio (2)
Estoy intentando usar Maven para mover todos los archivos * .xsd contenidos en una carpeta dada a otra, pero sin la estructura del subdirectorio de origen.
Esto es lo que tengo hasta ahora:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.3</version>
<executions>
<execution>
<id>move-schemas</id>
<phase>generate-sources</phase>
<goals>
<goal>resources</goal>
</goals>
<configuration>
<outputDirectory>${basedir}/schemas-target</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
...
<resources>
<resource>
<directory>${basedir}/schemas-source</directory>
<includes>
<include>**/*.xsd</include>
</includes>
</resource>
</resources>
Y está (casi) funcionando. El único problema es que mantiene la estructura del subdirectorio de origen, mientras que necesito eliminar esa jerarquía y colocar todos los archivos xsd en la carpeta de destino. Ejemplo:
Esto es lo que tengo en la carpeta schemas-source:
schemas-source
│- current
│ │- 0.3
│ │- myfile.xsd
│- old
│- 0.2
│- myfile-0.2.xsd
y esto es lo que necesitaría en la carpeta de esquemas de destino:
schemas-target
│- myfile.xsd
│- myfile-0.2.xsd
Hay un camino ... y es realmente monótono y engorroso. Implementalo solo si quieres ser completamente pervertido. La respuesta de Sean es la solución más fácil.
El problema es que tiene que especificar cada directorio y luego usar comodines para los archivos que contiene.
<execution>
<id>copy-jars</id>
<phase>process-sources</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${basedir}/target/classes</outputDirectory>
<resources>
<resource>
<directory>${basedir}/resources</directory>
<includes>
<include>xyz.jar</include>
</includes>
</resource>
<resource>
<directory>${basedir}/as-u-like-it</directory>
<includes>
<include>abc.jar</include>
</includes>
</resource>
</configuration>
Me golpeé la cabeza contra esa restricción, una y otra vez.
Básicamente: no creo que haya una solución sólo para expertos. Tendrás que recurrir a usar algo dinámico como
El Plugin Maven Antrun
Incrustar tareas ant en Maven, en este caso una tarea ant copy , algo como esto:<copy todir="${project.basedir}/schemas-target" flatten="true"> <fileset dir="${project.basedir}/schemas-source"> <include name="**/*.xsd"/> </fileset> </copy>
El complemento GMaven te permite ejecutar código Groovy desde tu pom, algo como esto:
new File(pom.basedir, ''schemas-source'').eachFileRecurse(FileType.FILES){ if(it.name.endsWith(''.xsd'')){ new File(pom.basedir, ''schemas-target/${it.name}'').text = it.text; } }