2010-11-23 17 views
22

J'essaie d'utiliser Maven pour déplacer tous les fichiers * .xsd contenus dans un dossier donné vers un autre, mais sans la structure du sous-répertoire source.Maven: copie de fichiers sans structure de sous-répertoire

C'est ce que j'ai jusqu'à présent:

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

Et il est (presque) de travail. Le seul problème est qu'il conserve la structure du sous-répertoire source, alors que j'ai besoin de supprimer cette hiérarchie et de mettre tous les fichiers xsd dans le dossier cible. Exemple:

C'est ce que j'ai dans le dossier des schémas source:

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

et voici ce que je avais besoin dans le dossier des schémas cible:

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

Répondre

20

Je me suis cogné la tête contre cette restriction moi-même, encore et encore. Fondamentalement: Je ne pense pas qu'il existe une seule solution Maven. Vous devrez recourir à l'utilisation de quelque chose de dynamique comme

  • Les Maven Antrun Plugin
    Intégrer des tâches de fourmis dans maven, dans ce cas, une fourmi copy task, quelque chose comme ceci:

    <copy todir="${project.basedir}/schemas-target" flatten="true"> 
        <fileset dir="${project.basedir}/schemas-source"> 
         <include name="**/*.xsd"/> 
        </fileset> 
    </copy> 
    
  • Le GMaven plugin Lets vous exécutez le code Groovy à partir de votre pom, quelque chose comme ceci:

    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

Merci, j'ai essayé le plugin Maven AntRun, mais je ne savais pas que flattern = "true" qui fait l'affaire. –

+0

Malheureusement, le plugin antrun est la seule façon dont j'ai pu effectuer des tâches similaires ... semble que "aplatir" aurait dû être inclus comme paramètre dans l'objectif de ressources de copie du plugin maven-resources. – JCD

+0

aplatir est un début, mais souvent je veux définir un "chemin de départ" comme lorsque j'élargis une archive WAR, je peux vouloir perdre web-inf/classes mais garder la structure du paquet. Mais je suppose que cela peut être réalisé en utilisant des mappers: http://ant.apache.org/manual/Types/mapper.html –

9

Il y a un chemin .. et c'est vraiment monotone et encombrant. Implémentez-le seulement si vous voulez être complètement mavenisé. La réponse de Sean est la solution la plus simple.

Le problème est que vous devez spécifier chaque répertoire, puis utiliser des caractères génériques pour les fichiers à l'intérieur.

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