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/resourcesdo 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.propertieswymaganą 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-pluginpozwala 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.