Eclipse a le concept des builds incrémentiels, ce qui est incroyablement utile car cela permet de gagner beaucoup de temps.
Comment est-ce utile
Supposons que vous venez de modifier un seul fichier .java. Les constructeurs incrémentiels pourront compiler le code sans avoir à tout recompiler (ce qui prendra plus de temps).
Maintenant quel est le problème avec les plugins Maven
La plupart des plugins maven ne sont pas conçus pour des constructions incrémentielles et créent donc des problèmes pour m2e. m2e ne sait pas si le but du plugin est quelque chose de crucial ou s'il n'est pas pertinent. S'il n'exécute que chaque plugin lorsqu'un seul fichier change, cela prendra beaucoup de temps.
C'est la raison pour laquelle m2e s'appuie sur les informations de métadonnées pour déterminer comment l'exécution doit être gérée. m2e a proposé différentes options pour fournir ces informations de métadonnées et l'ordre de préférence est le suivant (du plus élevé au plus bas)
- Fichier pom.xml du projet
- parent, grand-parent et ainsi de suite fichiers pom.xml
- [m2e 1.2+] préférences de l'espace de travail
- extensions M2E installées
- [m2e 1.1+] métadonnées de cartographie du cycle de vie fournies par le plugin maven
- métadonnées de mappage du cycle de vie par défaut fournies avec m2e
1,2 fait référence à la spécification de la section pluginManagement dans la balise de votre fichier pom ou de l'un de ses parents. M2E lit cette configuration pour configurer le projet.L'extrait de code ci-dessous indique à m2e d'ignorer les objectifs jslint
et compress
du yuicompressor-maven-plugin
<pluginManagement>
<plugins>
<!--This plugin's configuration is used to store Eclipse m2e settings
only. It has no influence on the Maven build itself. -->
<plugin>
<groupId>org.eclipse.m2e</groupId>
<artifactId>lifecycle-mapping</artifactId>
<version>1.0.0</version>
<configuration>
<lifecycleMappingMetadata>
<pluginExecutions>
<pluginExecution>
<pluginExecutionFilter>
<groupId>net.alchim31.maven</groupId>
<artifactId>yuicompressor-maven-plugin</artifactId>
<versionRange>[1.0,)</versionRange>
<goals>
<goal>compress</goal>
<goal>jslint</goal>
</goals>
</pluginExecutionFilter>
<action>
<ignore />
</action>
</pluginExecution>
</pluginExecutions>
</lifecycleMappingMetadata>
</configuration>
</plugin>
</plugins>
</pluginManagement>
3) Dans le cas où vous ne préférez pas polluer votre fichier pom avec ces métadonnées, vous pouvez les stocker dans un fichier XML externe (option 3). Vous trouverez ci-dessous un exemple de fichier de mappage qui demande à m2e d'ignorer les objectifs jslint
et compress
du yuicompressor-maven-plugin
<?xml version="1.0" encoding="UTF-8"?>
<lifecycleMappingMetadata>
<pluginExecutions>
<pluginExecution>
<pluginExecutionFilter>
<groupId>net.alchim31.maven</groupId>
<artifactId>yuicompressor-maven-plugin</artifactId>
<versionRange>[1.0,)</versionRange>
<goals>
<goal>compress</goal>
<goal>jslint</goal>
</goals>
</pluginExecutionFilter>
<action>
<ignore/>
</action>
</pluginExecution>
</pluginExecutions>
</lifecycleMappingMetadata>
4) Si vous n'aimez pas l'une de ces 3 options, vous pouvez utiliser un connecteur m2e (extension) pour le plugin maven qui fournira à son tour les métadonnées à m2e. Vous pouvez voir un exemple des informations de métadonnées dans un connecteur à ce lien . Vous avez peut-être remarqué que les métadonnées font référence à un configurateur. Cela signifie simplement que m2e déléguera la responsabilité à cette classe Java particulière fournie par l'auteur de l'extension. pas correctement géré dans le configurateur, cela peut conduire à des constructions de projets sans fin)
Reportez - vous ces liens pour un exemple de la configuratior ( link1 , lien2 ). Donc, dans le cas où le plugin est quelque chose qui peut être géré via un connecteur externe, vous pouvez l'installer. m2e tient à jour une liste de ces connecteurs fournis par d'autres développeurs, ce que l'on appelle le catalogue de découverte. m2e vous invitera à installer un connecteur si vous ne disposez pas déjà de métadonnées de mappage de cycle de vie pour l'exécution via l'une des options (1-6) et le catalogue de découverte a une extension qui peut gérer l'exécution.
L'image ci-dessous montre comment m2e vous invite à installer le connecteur pour le build-helper-maven-plugin.
.
5) m2e encourage les auteurs de plugins à prendre en charge la construction incrémentielle et à fournir le mappage du cycle de vie dans le maven-plugin lui-même.Cela signifie que les utilisateurs n'auront pas à utiliser de mappages ou de connecteurs de cycle de vie supplémentaires.Certains auteurs de plugins l'ont déjà implémenté
6) Par défaut, m2e contient les métadonnées de cartographie du cycle de vie pour la plupart des plugins couramment utilisés comme le maven-compiler-plugin et bien d'autres.
Revenons maintenant à la question: vous pouvez probablement simplement fournir une cartographie du cycle de vie ignorée en 1, 2 ou 3 pour cet objectif spécifique qui vous crée des problèmes.