6.1 Présentation des plugins

Les cycles de vie standard peuvent être améliorés avec des fonctionnalités à l'aide de plugins Maven. Les plugins permettent d'insérer de nouvelles étapes dans le cycle standard (par exemple, la distribution au serveur d'application) ou d'étendre des étapes existantes.

Les plugins dans Maven ne sont pas quelque chose d'extraordinaire, au contraire, ils sont la chose la plus courante et la plus fréquemment rencontrée. Après tout, si vous souhaitez définir certaines nuances de construction de votre projet, vous devez spécifier les informations nécessaires dans pom.xml. Et la seule façon de le faire est d'écrire un "plugin".

Étant donné que les plugins sont autant des artefacts que des dépendances, ils sont décrits à peu près de la même manière. Au lieu de la section dépendances - plugins, au lieu de dépendance - plugin, au lieu de référentiels - pluginRepositories, référentiel - pluginRepository.

Exemple:

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

Déclarer un plugin dans pom.xml vous permet de fixer la version du plugin, ainsi que de définir les paramètres nécessaires pour celui-ci, de définir divers paramètres de configuration et de se lier aux phases.

En d'autres termes, Maven exécute certains plugins qui font tout le travail. Autrement dit, si nous voulons enseigner à Maven des versions spéciales du projet, nous devons ajouter à pom.xml une indication pour lancer le plugin souhaité dans la phase requise et avec les paramètres requis .

Le nombre de plugins disponibles est très important, il existe différents plugins qui permettent d'exécuter une application web directement depuis maven pour la tester dans un navigateur, générer des ressources, etc. La tâche principale du développeur dans cette situation est de trouver et d'appliquer l'ensemble de plugins le plus approprié .

6.2 Cycle de vie et plugins

Très souvent, un plugin est utilisé pour lancer une sorte d'utilitaire de console lors de l'exécution d'une certaine phase. De plus, nous pouvons même exécuter une classe Java normale (qui a une méthode main, bien sûr).

Exemple:

<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>

Habituellement, les plugins peuvent être configurés de manière très flexible. Tous les plugins officiels des développeurs Maven sont très bien documentés sur le site officiel de Maven. Par exemple, pour le maven-compiler-plugin sur la page Apache Maven Project, vous pouvez voir une liste de toutes les variables qui contrôlent le plugin. Des informations sur le plugin sont disponibles sur le lien

Informations plus importantes. Différents plugins sont appelés par Maven à différentes étapes de leur cycle de vie. Par exemple, un projet décrivant une application de bureau Swing Java a des étapes de cycle de vie différentes de celles qui sont typiques pour le développement d'une application Web (war).

Ou, par exemple, lorsque la commande « mvn test » est exécutée, tout un ensemble d'étapes du cycle de vie du projet est initié : « process-resources », « compile », « process-classes », « process-test -resources", "test-compile" , test. Vous pouvez voir la mention de ces phases dans les messages affichés par Maven :

[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 Objectifs dans Maven - objectifs

Dans Maven, il existe aussi une chose telle qu'un objectif (but). goal est un peu comme la cible de démarrage Maven. Les principaux objectifs coïncident avec les phases principales :

  • valider;
  • compiler;
  • test;
  • emballer;
  • vérifier;
  • installer;
  • déployer.

Dans chaque phase du cycle de vie du projet, un plugin spécifique (jar-library) est appelé, qui comprend un certain nombre d'objectifs (goal)

Par exemple, le plugin "maven-compiler-plugin" contient deux cibles : compiler:compile pour compiler le code source principal du projet, et compiler:testCompile pour compiler les tests. Formellement, la liste des phases peut être modifiée, bien que cela soit rarement nécessaire.

Si vous devez effectuer des actions non standard dans une certaine phase, il vous suffit d'ajouter le plugin approprié à 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>

Le plus important dans ce cas est de définir pour le plugin le nom de la phase « exécution/phase », dans laquelle il faut embarquer l'appel au goal du plugin « goal ». Par exemple, vous devez générer du code Java basé sur xml. Il faut ensuite la phase "generate-sources", qui se place avant l'appel à la phase compile et est idéale pour générer une partie des sources du projet.