2010-11-23 12 views
22

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.Maven: copiar archivos sin estructura de subdirectorio

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 es (casi) de trabajo. El único problema es que mantiene la estructura del subdirectorio fuente, mientras que necesito eliminar esa jerarquía y poner todos los archivos xsd en la carpeta de destino. Ejemplo:

Esto es lo que tengo en la carpeta de esquemas de código:

schemas-source 
│- current 
│ │- 0.3 
│  │- myfile.xsd 
│- old 
     │- 0.2 
      │- myfile-0.2.xsd 

y esto es lo que iba a necesitar en la carpeta de esquemas-objetivo:

schemas-target 
│- myfile.xsd 
│- myfile-0.2.xsd 

Respuesta

20

me golpeé me opongo a esa restricción, una y otra vez.

Básicamente: no creo que haya una única solución. Tendrá que recurrir al uso de algo dinámico como

  • Los Maven Antrun Plugin
    Integrar tareas de hormigas en el experto, en este caso una hormiga copy task, algo como esto:

    <copy todir="${project.basedir}/schemas-target" flatten="true"> 
        <fileset dir="${project.basedir}/schemas-source"> 
         <include name="**/*.xsd"/> 
        </fileset> 
    </copy> 
    
  • El GMaven plugin Lets usted ejecuta el código Groovy de su 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; 
        } 
    } 
    
+0

Gracias, probé el Maven antRun Plugin, pero yo no era consciente de que flattern = "true" atributo que hace el truco. –

+0

Lamentablemente, el plugin antrun es la única manera en que he podido realizar tareas similares ... parece que "aplanar" debería haberse incluido como una configuración en el objetivo de copiar recursos del plugin maven-resources. – JCD

+0

aplanar es un comienzo, pero a menudo quiero establecer una "ruta de inicio" como cuando expandir un archivo WAR, es posible que desee perder web-inf/classes, pero mantener la estructura del paquete. Pero supongo que eso se puede lograr usando mappers: http://ant.apache.org/manual/Types/mapper.html –

9

Hay una manera ... y es realmente monótono y engorroso. Impleméntelo solo si quiere ser completamente mavenizado. La respuesta de Sean es la solución más fácil.

El problema es que tiene que especificar todos y cada uno de los directorios y luego usar comodines para los archivos dentro.

<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> 

Cuestiones relacionadas