2.1 maven-resources-plugin плъгин за копиране на ресурси
Ако създавате уеб приложение, тогава просто ще имате куп различни ресурси в него. Това са jar библиотеки, jsp сървлети, файлове с настройки. И разбира се, това е куп статични файлове като html
, css
, js
, Howто и различни снимки.
По подразбиране, когато създавате проект, Maven просто ще копира всичките ви файлове от папката src/main/resources
в целевата директория. Ако искате да направите промени в това поведение, плъгинът ще ви помогне maven-resources-plugin
.
Примерен code за такъв плъгин:
<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> instructions for copying a resource 1 </resource>
<resource> instructions for copying a resource 2 </resource>
<resource> instructions for copying a resource N </resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
Този плъгин ще бъде извикан по време на фазата на валидиране. С помощта на етикета <outputDirectory>
можете да зададете директорията, където плъгинът да копира ресурсите, посочени в <resources>
. И тук плъгинът може да се разгърне с цялата си мощ.
2.2 Филтриране на ресурси с плъгина maven-resources
Ресурсите на приставките могат да бъдат посочени не само под формата на файлове, но веднага под формата на директории. Освен това към директорията може да се добави маска, която указва кои файлове от нея ще бъдат включени в този ресурс.
Пример:
<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>
Етикетите се прилагат последователно: първо включените файлове, посочени във включените файлове, ще бъдат добавени към ресурса, а след това изключените файлове ще бъдат изключени от този списък.
Но това не е всичко. Плъгинът може да гледа във файлове (ако са текстови, разбира се). И например добавете application.properties
необходимата version на сборката към file. За да може приставката да обработи съдържанието на file, трябва да посочите параметъра <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
позволява ви да включите изходния code на вашите java файлове в сборката. За Howво?
Работата е там, че в допълнение към уеб applicationsта, много голям брой библиотеки се сглобяват с помощта на Maven. Много Java проекти следват концепцията за отворен code и се разпространяват сред 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
.
Разделът за изпълнение посочва, че плъгинът ще бъде извикан по време на фазата на изграждане - пакет, цел - копиране-зависимости.
Като цяло този плъгин има доста голям набор от цели, ето най-популярните:
1 | зависимост: анализирам | анализ на зависимостта (използван, неизползван, определен, неопределен) |
2 | зависимост:анализ-дубликат | идентифициране на дублиращи се зависимости |
3 | зависимост: разрешаване | разрешаване (дефиниране) на всички зависимости |
4 | зависимост: разреши-плъгин | разрешение (дефиниция) на всички добавки |
5 | зависимост: дърво | показване на дървото на зависимостите |
Можете също да зададете допълнителни параметри в раздела за конфигурация:
1 | изходна директория | Директория, в която ще се копират зависимостите |
2 | overWriteReleases | Флаг за презаписване на зависимости при създаване на version |
3 | overwriteSnapshots | Флаг за презаписване на нетерминални зависимости, които имат МОМЕНТНА СНИМКА |
4 | overWriteIfNewer | Флаг за презаписване на библиотеки с по-нови версии |
Пример:
<configuration>
<outputDirectory>
${project.build.directory}/lib/
</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
</configuration>
По подразбиране <overWriteReleases>
и <overWriteSnapshots>
е невярно, защото <overWriteIfNewer>
е истина.
GO TO FULL VERSION