6.1 Wprowadzenie do wtyczek

Standardowe cykle życia można rozszerzyć o funkcjonalność za pomocą wtyczek Maven. Wtyczki umożliwiają wstawianie nowych kroków do standardowego cyklu (np. dystrybucja na serwer aplikacji) lub rozszerzanie istniejących kroków.

Wtyczki w Mavenie nie są niczym niezwykłym, wręcz przeciwnie, są najczęstszą i najczęściej spotykaną rzeczą. W końcu, jeśli chcesz ustawić jakieś niuanse budowania swojego projektu, musisz podać niezbędne informacje w pliku pom.xml. A jedynym sposobem na to jest napisanie „wtyczki”.

Ponieważ wtyczki są w takim samym stopniu artefaktami, jak zależności, są opisywane w podobny sposób. Zamiast sekcji zależności - wtyczki, zamiast zależności - wtyczka, zamiast repozytoriów - pluginRepositories, repozytorium - pluginRepository.

Przykład:

<plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-checkstyle-plugin</artifactId>
        <version>2.6</version>
    </plugin>
</plugins>

Zadeklarowanie wtyczki w pom.xml pozwala naprawić wersję wtyczki, a także ustawić dla niej niezbędne parametry, zdefiniować różne parametry konfiguracyjne i powiązać z fazami.

Innymi słowy, Maven uruchamia pewne wtyczki, które wykonują całą pracę. Czyli jeśli chcemy uczyć Mavena o specjalnych kompilacjach projektu, to musimy dodać do pom.xml wskazanie, aby uruchomić żądaną wtyczkę w wymaganej fazie i z wymaganymi parametrami .

Liczba dostępnych wtyczek jest bardzo duża, istnieją różne wtyczki, które pozwalają uruchomić aplikację internetową bezpośrednio z maven, aby przetestować ją w przeglądarce, wygenerować zasoby i tym podobne. Głównym zadaniem programisty w tej sytuacji jest znalezienie i zastosowanie najbardziej odpowiedniego zestawu wtyczek .

6.2 Cykl życia i wtyczki

Bardzo często wtyczka jest używana do uruchamiania jakiegoś narzędzia konsoli podczas określonej fazy. Co więcej, możemy nawet uruchomić zwykłą klasę Java (która oczywiście ma metodę main).

Przykład:

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>exec-maven-plugin</artifactId>
  <version>1.2.1</version>
  <executions>
    <execution>
      <goals>
        <goal>java</goal>
      </goals>
    </execution>
  </executions>
  <configuration>
    <mainClass>com.example.Main</mainClass>
    <arguments>
      <argument>first-argument</argument>
      <argument>second-argument</argument>
    </arguments>
  </configuration>
</plugin>

Zwykle wtyczki można bardzo elastycznie konfigurować. Wszystkie oficjalne wtyczki programistów Maven są bardzo dobrze udokumentowane na oficjalnej stronie Maven. Na przykład dla maven-compiler-plugin na stronie projektu Apache Maven możesz zobaczyć listę wszystkich zmiennych, które kontrolują wtyczkę. Informacje o wtyczce dostępne są pod linkiem

Ważniejsze informacje. Różne wtyczki są wywoływane przez Mavena na różnych etapach ich cyklu życia. Na przykład projekt opisujący swingową aplikację desktopową Java ma inne etapy cyklu życia niż te, które są typowe dla rozwoju aplikacji webowej (wojna).

Lub, na przykład, po wykonaniu polecenia „mvn test” inicjowany jest cały zestaw kroków w cyklu życia projektu: „process-resources”, „compile”, „process-classes”, „process-test-resources” ”, „test-kompilacja” , test. Możesz zobaczyć wzmiankę o tych fazach w komunikatach wyświetlanych przez Mavena:

[INFO] Scanning for projects...
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources)     @ codegym ---
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile)      @ codegym
[INFO] --- maven-resources-plugin:2.6:testResources         (default-testResources) @ codegym ---
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile)          @ codegym ---
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test)         @ codegym ---
[INFO] Surefire report directory:           t:\ projects\codegym\target\surefire-reports

6.3 Bramki w Maven - bramki

W Mavenie istnieje też coś takiego jak cel (cel). cel jest trochę podobny do celu startowego Maven. Główne cele pokrywają się z głównymi fazami:

  • uprawomocnić;
  • skompilować;
  • test;
  • pakiet;
  • zweryfikować;
  • zainstalować;
  • wdrożyć.

W każdej fazie cyklu życia projektu wywoływana jest konkretna wtyczka (jar-library), która zawiera szereg celów (goal)

Na przykład wtyczka „maven-compiler-plugin” zawiera dwa cele: kompilator: kompilacja do kompilacji głównego kodu źródłowego projektu i kompilator: test Kompilacja do kompilacji testów. Formalnie listę faz można zmienić, choć rzadko jest to konieczne.

Jeśli potrzebujesz wykonać jakąś niestandardową akcję w jakiejś fazie, wystarczy dodać odpowiednią wtyczkę do pom.xml

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>Name-plugin</artifactId>
  <executions>
    <execution>
      <id>customTask</id>
      <phase>generate-sources</phase>
      <goals>
        <goal>pluginGoal</goal>
      </goals>
    </execution>
  </executions>
</plugin>

Najważniejsze w tym przypadku jest zdefiniowanie dla wtyczki nazwy fazy „wykonanie/faza”, w której należy osadzić wywołanie celu wtyczki „goal”. Na przykład musisz wygenerować kod Java na podstawie xml. Następnie potrzebna jest faza „generate-sources”, która jest umieszczona przed wywołaniem fazy kompilacji i jest idealna do generowania części źródeł projektu.