2010-11-23 2 views
22

Я пытаюсь использовать Maven для перемещения всех * .xsd-файлов, содержащихся в данной папке, на другую, но без исходной структуры подкаталога.Maven: копировать файлы без структуры подкаталога

Это то, что я до сих пор:

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

И это (почти) работает. Единственная проблема заключается в том, что он сохраняет структуру подкаталога источника, в то время как мне нужно удалить эту иерархию и поместить все файлы xsd в целевую папку. Пример:

Это то, что я имею в папке схемы источника:

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

и это то, что мне нужно в схемы-целевой папки:

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

ответ

20

Я ударился голова против этого ограничения я, снова и снова.

В принципе: я не думаю, что существует только решение maven. Вам придется прибегнуть к помощи что-то динамичное, как

  • муравей задачи Maven Antrun Plugin
    Вставить в мавена, в этом случае муравей copy task, что-то вроде этого:

    <copy todir="${project.basedir}/schemas-target" flatten="true"> 
        <fileset dir="${project.basedir}/schemas-source"> 
         <include name="**/*.xsd"/> 
        </fileset> 
    </copy> 
    
  • GMaven plugin Lets вы выполняете код Groovy от вашего помпея, примерно так:

    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

Спасибо, я попробовал Maven Antrun плагин, но я не знал, что flattern = «истинный» атрибут, который делает трюк. – 2010-11-23 16:43:30

9

Существует способ ... и его действительно монотонный и громоздкий. Реализуйте его только в том случае, если вы хотите быть полностью омраченным. Ответ Шона - самое легкое решение.

Проблема заключается в том, что вы должны указывать все каталоги, а затем использовать wild cards для файлов внутри.

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

Смежные вопросы