2.1 Плагин копирования ресурсов maven-resources-plugin
Если ты собираешь web-приложение, то у тебя будет просто куча различных ресурсов в нем. Это jar-библиотеки, jsp-сервлеты, файлы настроек. Ну и конечно же это куча статических файлов типа html, css, js, а также различных картинок.
По умолчанию Maven при сборке проекта просто скопирует все ваши файлы из папки src/main/resources в директорию target. Если же ты хочешь внести изменения в это поведение, то тебе поможет плагин maven-resources-plugin.
Пример кода такого плагина:
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<id>copy-resources</id> <phase>validate</phase> <goals> <goal>copy-resources</goal> </goals>
<configuration> <outputDirectory> ${basedir}/target/resources </outputDirectory> <resources>
<resource> инструкции по копированию ресурса 1 </resource> <resource> инструкции по копированию ресурса 2 </resource> <resource> инструкции по копированию ресурса N </resource>
</resources> </configuration>
</execution>
</executions>
</plugin>
Данный плагин вызовется во время фазы validate. С помощью тега <outputDirectory> можно задать директорию, в которую плагин должен будет скопировать ресурсы, заданные в секции <resources>. И вот тут-то плагин может развернуться во всю свою мощь.
2.2 Фильтрация ресурсов с помощью maven-resources-plugin
Ресурсы плагина можно задавать не только в виде файлов, а сразу в виде директорий. Более того, к директории можно добавить маску, которая задает какие именно файлы из нее будет включены в данный ресурс.
Пример:
<resource>
<directory>src/main/resources/images</directory>
<includes>
<include>**/*.png</include>
</includes>
</resource>
Две звездочки в качестве маски обозначают любое количество директорий. В примере выше в качестве данных ресурса будут взяты все png-файлы, которые содержаться в директории src/main/resources/images (и ее поддиректориях).
Если ты хочешь исключить какие-нибудь файлы, можешь воспользоваться тегом exclude. Пример:
<resource>
<directory>src/main/resources/images</directory>
<includes> <include>**/*.png</include> </includes>
<excludes> <exclude>old/*.png</exclude> </excludes>
</resource>
Теги применяются последовательно: сначала к ресурсу будут добавлены указанные в include-файлы, а затем из этого списка исключат exclude-файлы.
Но и это еще не все. Плагин умеет заглядывать внутрь файлов (если они текстовые, конечно). И, например, добавить в файл application.properties нужную версию сборки. Чтобы плагин обрабатывал содержимое файла, нужно указать ему параметр <filtering>true</filtering>.
Пример:
<resource>
<directory>src/main/resources/properties</directory>
<filtering>true</filtering>
<includes> <include>**/*. properties </include> </includes>
</resource>
Более подробно с данным плагином можно ознакомиться по ссылке: https://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html
2.3 Плагин включения исходных кодов maven-source-plugin
Еще один полезный плагин – maven-source-plugin позволяет включать в сборку исходный код ваших java-файлов. Зачем?
Все дело в том, что кроме web-приложений, с помощью Maven собирается очень большое количество библиотек. Очень много Java-проектов следуют концепции open-source и распространяются среди Java-сообщества со своими исходниками.
Зачем нужен отдельный плагин? Почему нельзя просто скопировать исходники и все?
Во-первых, в любом сложном проекте исходники могут храниться в нескольких местах.
Во-вторых, часто используется генерация исходников на основе xml-спецификаций, такие исходники тоже нужно включать в сборку.
Ну и в-третьих, ты можешь решить не включать какие-нибудь особо секретные файлы в вашу сборку.
Пример использования плагина maven-source-plugin:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.2.1</version>
<executions>
<execution>
<id>attach-sources</id>
<phase>verify</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
2.4 Плагин копирования зависимостей maven-dependency-plugin
Также тебе может понадобиться умное копирование зависимостей (библиотек) при сборке проекта. Для этого используется плагин maven-dependency-plugin.
Пример:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.5.1</version>
<configuration>
<outputDirectory> ${project.build.directory}/lib/ </outputDirectory>
</configuration>
<executions>
<execution> <id>copy-dependencies</id> <phase>package</phase> <goals> <goal>copy-dependencies</goal> </goals> </execution>
</executions>
</plugin>
В этом примере прописано дефолтное поведение плагина – копирование библиотек в директорию ${project.build.directory}/lib.
В секции execution прописано, что плагин будет вызван во время фазы сборки – package, goal – copy-dependences.
В целом, у этого плагина довольно большой набор целей, вот самые популярные из них:
| 1 | dependency:analyze | анализ зависимостей (используемые, неиспользуемые, указанные, неуказанные) |
| 2 | dependency:analyze-duplicate | определение дублирующихся зависимостей |
| 3 | dependency:resolve | разрешение (определение) всех зависимостей |
| 4 | dependency:resolve-plugin | разрешение (определение) всех плагинов |
| 5 | dependency:tree | вывод на экран дерева зависимостей |
Также в разделе configuration можно задать дополнительные параметры:
| 1 | outputDirectory | Директория, в которую будут копироваться зависимости |
| 2 | overWriteReleases | Флаг необходимости перезаписывания зависимостей при создании релиза |
| 3 | overWriteSnapshots | Флаг необходимости перезаписывания неокончательных зависимостей, в которых присутствует SNAPSHOT |
| 4 | overWriteIfNewer | Флаг необходимости перезаписывания библиотек с наличием более новых версий |
Пример:
<configuration>
<outputDirectory>
${project.build.directory}/lib/
</outputDirectory>
<overWriteReleases>false</overWriteReleases> <overWriteSnapshots>false</overWriteSnapshots> <overWriteIfNewer>true</overWriteIfNewer>
</configuration>
По умолчанию <overWriteReleases> и <overWriteSnapshots> – false, для <overWriteIfNewer> – true.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ