2.1 maven-resources-plugin wtyczka do kopiowania zasobów
Jeśli budujesz aplikację internetową, będziesz mieć w niej po prostu kilka różnych zasobów. Są to biblioteki jar, serwlety jsp, pliki ustawień. I oczywiście jest to kilka statycznych plików, takich jak html
, css
, js
, a także różne obrazy.
Domyślnie podczas budowania projektu Maven po prostu skopiuje wszystkie twoje pliki z folderu src/main/resources
do katalogu docelowego. Jeśli chcesz wprowadzić zmiany w tym zachowaniu, wtyczka Ci w tym pomoże maven-resources-plugin
.
Przykładowy kod takiej wtyczki:
<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>
Ta wtyczka zostanie wywołana podczas fazy sprawdzania poprawności. Za pomocą znacznika <outputDirectory>
możesz ustawić katalog, do którego wtyczka ma skopiować zasoby określone w pliku <resources>
. I tutaj wtyczka może rozwinąć się z całą mocą.
2.2 Filtrowanie zasobów za pomocą wtyczki maven-resources
Zasoby wtyczek można określić nie tylko w postaci plików, ale od razu w postaci katalogów. Ponadto do katalogu można dodać maskę, która określa, które pliki z niego zostaną uwzględnione w tym zasobie.
Przykład:
<resource>
<directory>src/main/resources/images</directory>
<includes>
<include>**/*.png</include>
</includes>
</resource>
Dwie gwiazdki jako maska reprezentują dowolną liczbę katalogów . W powyższym przykładzie wszystkie pliki png zawarte w katalogu src/main/resources/images
(i jego podkatalogach) zostaną potraktowane jako dane zasobów.
Jeśli chcesz wykluczyć niektóre pliki, możesz użyć rozszerzenia exclude
. Przykład:
<resource>
<directory>src/main/resources/images</directory>
<includes>
<include>**/*.png</include>
</includes>
<excludes>
<exclude>old/*.png</exclude>
</excludes>
</resource>
Tagi są stosowane sekwencyjnie: najpierw pliki dołączane określone w plikach włączanych zostaną dodane do zasobu, a następnie wykluczone pliki zostaną wykluczone z tej listy.
Ale to nie wszystko. Wtyczka może przeglądać pliki (oczywiście jeśli są tekstowe). I na przykład dodaj application.properties
wymaganą wersję zestawu do pliku. Aby wtyczka przetworzyła zawartość pliku, należy podać parametr <filtering>true</filtering>
.
Przykład:
<resource>
<directory>src/main/resources/properties</directory>
<filtering>true</filtering>
<includes>
<include>**/*. properties </include>
</includes>
</resource>
Więcej szczegółów na temat tej wtyczki można znaleźć pod linkiem: https://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html
2.3 wtyczka dołączania źródła maven-source-plugin
Kolejna przydatna wtyczka - maven-source-plugin
pozwala dołączyć kod źródłowy plików java do asemblera. Po co?
Rzecz w tym, że oprócz aplikacji webowych bardzo duża liczba bibliotek jest montowana za pomocą Mavena. Wiele projektów Java jest zgodnych z koncepcją open source i jest rozpowszechnianych wśród społeczności Java z własnymi źródłami.
Dlaczego potrzebujesz oddzielnej wtyczki? Dlaczego nie możesz po prostu skopiować źródła i to wszystko?
Po pierwsze, w każdym złożonym projekcie źródła mogą być przechowywane w kilku miejscach.
Po drugie, często stosuje się generowanie źródeł na podstawie specyfikacji xml, takie źródła również muszą być uwzględnione w asemblerze.
Po trzecie, możesz zdecydować, że nie będziesz dołączać żadnych szczególnie tajnych plików do swojego zestawu.
Przykład użycia wtyczki 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 Wtyczka do kopiowania zależności maven-dependency-plugin
Może być również konieczne inteligentne kopiowanie zależności (bibliotek) podczas tworzenia projektu. Służy do tego wtyczka maven-dependency-plugin
.
Przykład:
<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>
W tym przykładzie zapisano domyślne zachowanie wtyczki — kopiowanie bibliotek do pliku ${project.build.directory}/lib
.
Sekcja wykonania stwierdza, że wtyczka zostanie wywołana podczas fazy kompilacji - pakiet, cel - zależności od kopiowania.
Ogólnie rzecz biorąc, ta wtyczka ma dość duży zestaw celów, oto najpopularniejsze z nich:
1 | zależność: analiza | analiza zależności (używane, nieużywane, określone, nieokreślone) |
2 | zależność: duplikat analizy | identyfikowanie zduplikowanych zależności |
3 | zależność: rozwiązać | rozwiązanie (definicja) wszystkich zależności |
4 | zależność: rozwiąż wtyczkę | pozwolenie (definicja) wszystkich wtyczek |
5 | zależność: drzewo | wyświetlanie drzewa zależności |
Możesz także ustawić dodatkowe parametry w sekcji konfiguracji:
1 | katalog wyjściowy | Katalog, do którego zostaną skopiowane zależności |
2 | overWriteReleases | Flaga, aby zastąpić zależności podczas tworzenia wydania |
3 | nadpisz migawki | Flaga, aby zastąpić zależności nieterminalne, które mają SNAPSHOT |
4 | nadpisz, jeśli nowszy | Zaznacz, aby nadpisać biblioteki nowszymi wersjami |
Przykład:
<configuration>
<outputDirectory>
${project.build.directory}/lib/
</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
</configuration>
Domyślnie <overWriteReleases>
i <overWriteSnapshots>
jest fałszywe, ponieważ <overWriteIfNewer>
jest prawdziwe.
GO TO FULL VERSION