Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Maven : copy files without subdirectory structure

I am trying to use Maven to move all the *.xsd files contained in a given folder to another one, but without the source subdirectory structure.

This is what I have so far:

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

And it is (almost) working. The only problem is that it keeps the source subdirectory structure, while I need to remove that hierarchy and put all the xsd files in the target folder. Example:

This is what I have in the schemas-source folder:

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

and this is what I'd need in the schemas-target folder:

schemas-target  │- myfile.xsd  │- myfile-0.2.xsd 
like image 901
Guido Avatar asked Nov 23 '10 15:11

Guido


1 Answers

I banged my head against that restriction myself, again and again.

Basically: I don't think there's a maven only solution. You will have to resort to using something dynamic like

  • The Maven Antrun Plugin
    Embed ant tasks in maven, in this case an ant copy task, something like this:

    <copy todir="${project.basedir}/schemas-target" flatten="true">     <fileset dir="${project.basedir}/schemas-source">         <include name="**/*.xsd"/>     </fileset> </copy> 
  • The GMaven plugin Lets you execute Groovy code from your pom, something like this:

    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;     } } 
like image 171
Sean Patrick Floyd Avatar answered Sep 19 '22 05:09

Sean Patrick Floyd