Перейти к основному содержимому

Копирование файлов с помощью Maven

· 3 мин. чтения

1. Введение

Maven — это инструмент автоматизации сборки, который позволяет разработчикам Java управлять сборкой проекта, отчетами и документацией из централизованного места — POM (объектная модель проекта).

Когда мы создаем проект Java, нам часто требуется, чтобы произвольные ресурсы проекта копировались в определенное место в выходной сборке — мы можем добиться этого с помощью Maven с помощью нескольких различных плагинов.

В этом руководстве мы создадим проект Java и скопируем определенный файл в место назначения в выходных данных сборки , используя:

  • maven-ресурсы-плагин
  • maven-antrun-плагин
  • копировать-переименовать-maven-плагин

2. Использование плагина Maven Resources

Плагин maven-resources-plugin обрабатывает копирование ресурсов проекта в выходной каталог.

Начнем с добавления плагина в наш pom.xml :

<project>
...
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.2.0</version>
</plugin>
...
</plugins>
</pluginManagement>
<!-- To use the plugin goals in your POM or parent POM -->
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.2.0</version>
</plugin>
...
</plugins>
</build>
...
</project>

Затем давайте создадим папку в корне проекта с именем source-files. Он будет содержать текстовый файл, который мы хотим скопировать: foo.txt . Затем мы добавим элемент конфигурации в maven-resources-plugin , чтобы скопировать этот файл в target/destination-folder :

<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
<executions>
<execution>
<id>copy-resource-one</id>
<phase>generate-sources</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${basedir}/target/destination-folder</outputDirectory>
<resources>
<resource>
<directory>source-files</directory>
<includes>
<include>foo.txt</include>
</includes>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>

После сборки проекта мы можем найти файл foo.txt в папке target/destination .

3. Использование плагина Maven Antrun

Плагин maven-antrun позволяет запускать задачи Ant из Maven. Мы будем использовать его здесь, чтобы указать задачу Ant, которая копирует исходный файл в место назначения.

Плагин определяется в pom.xml следующим образом:

<project>
[...]
<build>
<plugins>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<phase>
<phase>generate-sources</phase>
</phase>
<configuration>
<target>
<!-- Place any Ant task here. -->
</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

Мы выполним тот же пример, что и выше: копирование исходных файлов/foo.txt в target/destination-folder/foo.txt — мы добьемся этого, определив задачу Ant для выполнения копирования:

<configuration>
<target>
<mkdir dir="${basedir}/target/destination-folder" />
<copy todir="${basedir}/target/destination-folder">
<fileset dir="${basedir}/source-files" includes="foo.txt" />
</copy>
</target>
</configuration>

После сборки проекта мы найдем файл foo.txt в папке target/destination .

4. Использование плагина Copy Rename Maven

Плагин copy-rename-maven помогает копировать файлы или переименовывать файлы/каталоги во время жизненного цикла сборки Maven.

Плагин можно установить, добавив следующую запись в наш pom.xml :

<project>
...
<build>
<plugins>
<plugin>
<groupId>com.coderplus.maven.plugins</groupId>
<artifactId>copy-rename-maven-plugin</artifactId>
<version>1.0</version>
<executions>
<execution>
<id>copy-file</id>
<phase>generate-sources</phase>
<goals>
<goal>copy</goal>
</goals>
<configuration>
<!-- Place config here -->
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

Теперь мы добавим некоторую конфигурацию для выполнения копирования: исходные файлы/foo.txt в target/destination-folder/foo.txt :

<configuration>
<sourceFile>source-files/foo.txt</sourceFile>
<destinationFile>target/destination-folder/foo.txt</destinationFile>
</configuration>

После сборки проекта мы увидим файл foo.txt в папке target/destination .

5. Вывод

Мы успешно скопировали исходный файл в место назначения, используя три разных плагина Maven. Каждый из них работает немного по-своему, и хотя мы рассмотрели здесь копирование одного файла, плагины способны копировать несколько файлов, а в некоторых случаях и целые каталоги.

Другие наши статьи, а также официальная документация для каждого из плагинов содержат более подробные сведения о том, как выполнять более сложные операции.

Исходный код этих примеров можно найти на GitHub .