Maven: копировать файлы без структуры подкаталога
Я пытаюсь использовать Maven для перемещения всех файлов *.xsd, содержащихся в данной папке, на другую, но без структуры исходного каталога.
Это то, что у меня есть до сих пор:
<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
Ответы
Ответ 1
Я снова и снова ударил себя по этому ограничению.
В принципе: я не думаю, что есть решение только для maven. Вам придётся прибегнуть к использованию чего-то динамичного, например
-
Плагин Maven Antrun
Вставьте ant задачи в maven, в этом случае задачу ant , примерно так:
<copy todir="${project.basedir}/schemas-target" flatten="true">
<fileset dir="${project.basedir}/schemas-source">
<include name="**/*.xsd"/>
</fileset>
</copy>
-
плагин GMaven
Позволяет вам выполнить Groovy код из вашего pom, что-то вроде этого:
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;
}
}
Ответ 2
Есть способ... и его действительно монотонный и громоздкий. Реализуйте его только в том случае, если вы хотите быть полностью омраченным. Ответ Шона - это самое простое решение.
Проблема заключается в том, что вы должны указывать каждый каталог, а затем использовать 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>