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 .