1. Плагін копіювання ресурсів maven-resources-plugin
Якщо ти складаєш (збираєш) вебзастосунок, у тебе буде просто купа різних ресурсів у ньому. Це 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. Фільтрування ресурсів за допомогою 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>
</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.
3. Плагін внесення вихідних кодів maven-source-plugin
Ще один корисний плагін – maven-source-plugin
дозволяє вносити до складання вихідний код ваших java-файлів. Навіщо?
Справа в тому, що окрім вебзастосунків за допомогою 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>
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.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ