Exécution du plugin non couverte par la configuration du cycle de vie (archétype JBossas 7 EAR)

123

J'utilise Eclipse 3.7 Indigo avec Maven M2E Plugin 1.0.100.

En utilisant l'archétype JBoss 7.x JavaEE 6 EAR, le pom pour EAR me donne cette erreur:

Exécution du plugin non couverte par la configuration du cycle de vie: org.apache.maven.plugins: maven-ear-plugin: 2.6: generate-application-xml (exécution: default-generate-application-xml, phase: generate-resources)

<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-ear-plugin</artifactId>
   <version>2.6</version>
   <configuration>
      <!-- Tell Maven we are using Java EE 6 -->
      <version>6</version>
      <!-- Use Java EE ear libraries as needed. Java EE ear libraries 
                  are in easy way to package any libraries needed in the ear, and automatically 
                  have any modules (EJB-JARs and WARs) use them -->
      <defaultLibBundleDir>lib</defaultLibBundleDir>
      <modules></modules>
   </configuration>
<plugin>
Oh Chin Boon
la source

Réponses:

138

C'est une "fonctionnalité" du plugin M2E qui avait été introduite il y a quelque temps. Ce n'est pas directement lié au plugin JBoss EAR mais cela se produit également avec la plupart des autres plugins Maven.

Si vous avez une exécution de plugin définie dans votre pom(comme l'exécution de maven-ear-plugin:generate-application-xml), vous devez également ajouter des informations de configuration supplémentaires pour M2E qui indiquent à M2E ce qu'il faut faire lorsque la construction est exécutée dans Eclipse, par exemple si l'exécution du plugin est ignorée ou exécutée par M2E, si cela est également fait pour les builds incrémentiels, ... Si ces informations sont manquantes, M2E s'en plaint en affichant ce message d'erreur:

"L'exécution du plugin n'est pas couverte par la configuration du cycle de vie"

Voir ici pour une explication plus détaillée et un exemple de configuration qui doit être ajouté au pom pour que cette erreur disparaisse:

https://www.eclipse.org/m2e/documentation/m2e-execution-not-covered.html

Jan
la source
70
@Jan je ne comprends pas le concept. M2E doit être transparent pour l'utilisateur. Faites ce que fait la ligne de commande Maven, mais depuis Eclipse. Il ne devrait pas y avoir dans les données de configuration pom pour dire à M2E quoi faire. Si c'est le cas, c'est une mauvaise conception. BTW, ces erreurs ont parfois disparu dans les nouvelles versions d'Eclipse et M2E.
rapt le
8
Je suis d'accord avec Rapt. Mon POM n'a aucune dépendance sur m2e et je voudrais en ajouter un maintenant simplement parce que j'utilise Eclipse comme IDE. C'est un impost pour les autres travaillant sur le même projet qui pourraient bien utiliser un autre IDE tel qu'IntelliJ. Si m2e a besoin de ces conseils, il devrait faire partie de la configuration m2e dans Eclipse.
William
12
Certains objectifs n'ont pas de sens dans Eclipse. Par exemple, j'ai des projets où les fichiers ZIP sont décompressés dans le targetdossier. Vous ne voudriez pas que cela soit refait "incrémentalement" lors de l'enregistrement de chaque fichier source. Ou peut-être que vous le voulez. Vraiment, m2e n'a aucune idée de votre construction spécifique. Vous pouvez stocker ce que m2e doit faire dans Eclipse, POM, ou éventuellement installer un connecteur m2e qui ajoute plus de connaissances à m2e pour gérer l'étape de construction. Ce sont les options que vous devriez voir. Je comprends que vous ne voulez pas rendre votre POM m2e conscient, mais c'est un bon endroit pour configurer cela de manière centralisée pour tous vos développeurs.
Sander Verhagen
3
Le problème est que la documentation liée à cela, comme la plupart de la documentation sur Maven ou Eclipse. est abcacadabra. Peu importe à quel point ils essaient de l'expliquer clairement, l'explication repose sur trop de concepts que je ne comprends pas en tant qu'utilisateur relativement nouveau de Maven et ne sais pas comment chercher - tout ce que je trouve a le même problème: trop d'inexpliqués concepts. La technologie est trop complexe ou la documentation est trop mal organisée. Dans tous les cas, la courbe d'apprentissage est élevée. Les réponses apportées ici apportent beaucoup de clarté.
reinierpost
10
@RicardoGladwell Vous avez mal compris le but des votes négatifs. La flèche dit "cette réponse n'est pas utile" - et c'est faux de cette réponse. Donc, même si vous n'aimez pas le ton avec lequel cette réponse est écrite, le vote défavorable était déplacé.
Dawood ibn Kareem le
43

de toute façon, il est trop tard mais ma solution était un simple clic droit sur le message d'erreur dans Eclipse et en choisissant Quick Fix >> Ignorer pour chaque pom avec de telles erreurs

java_newbie
la source
3
Ce n'est pas trop tard. Je viens de résoudre le problème de cette façon!
reinierpost
2
Moi aussi. Toutes ces recherches et essayer de comprendre quel était le problème m'a donné mal à la tête, alors je l'ai ignoré :) Merci.
dleerob
1
Cela a fonctionné pour moi. Je soupçonne qu'il génère automatiquement ce qui est décrit par la réponse de @ Jan qui pointe vers eclipse.org/m2e/documentation/m2e-execution-not-covered.html parce que le seul changement que j'ai vu après avoir accepté la solution rapide était un changement de mon pom. xml.
Michael Osofsky
J'ai réessayé sur une autre machine et le problème a disparu lorsque j'ai mis à jour JBehave 3.9.4 vers 3.9.5 car c'était le plugin JBehave, dans mon cas, qui créait l'erreur (j'avais généré la configuration du plugin à partir d'un archétype JBehave Maven ( jbehave.org/reference/stable/archetypes.html ))
Michael Osofsky
30

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)

  1. Fichier pom.xml du projet
  2. parent, grand-parent et ainsi de suite fichiers pom.xml
  3. [m2e 1.2+] préférences de l'espace de travail
  4. extensions M2E installées
  5. [m2e 1.1+] métadonnées de cartographie du cycle de vie fournies par le plugin maven
  6. 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 jslintet compressdu 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 jslintet compressdu 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. connecteur d'installation suggéré à partir du catalogue de découverte.

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.

coderplus
la source
14

Une bonne solution de contournement pour vous rappeler que m2e pourrait être mieux configuré, sans que le projet n'hérite d'un marqueur d'erreur faux positif, consiste simplement à rétrograder ces erreurs en avertissements:

Fenêtre -> Préférences -> Maven -> Erreurs / Avertissements -> Exécution du plugin non couverte par la configuration du cycle de vie = Avertissement

mgobeil
la source
12

J'ai essayé d'exécuter un branchement spécifique juste après le nettoyage, c'est-à-dire après le nettoyage (par défaut, c'est la phase de nettoyage). Cela a fonctionné pour moi avec l'indigo eclipse. L'ajout du post-nettoyage a résolu le problème pour moi.

<executions>
  <execution>
    <configuration>
    </configuration>
   <phase>post-clean</phase>
    <goals>
      <goal>update-widgetset</goal>
    </goals>
  </execution>
</executions> 
Charith De Silva
la source
11
Pouvez-vous expliquer pourquoi cela fonctionne? «Juste ajouté» et «résolu pour moi» n'augmente pas vraiment ma confiance dans le fait de ne pas avoir de comportements cachés indésirables.
Kissaki le
Effectivement, j'ai un phaseet un goalpour le executiondans le pom.xml qui m'a été donné, et j'obtiens toujours l'erreur.
reinierpost
Messieurs - mes excuses. Je ne suis pas un expert maven, je voulais aider quelqu'un1 à la recherche d'une solution rapide. Je devrais cependant avoir plus de perspicacité. Je pense que l'astuce ici est l'inclusion de la phase d'exécution. Puisque mojo peut définir des phases d'exécution, j'ai essayé d'exécuter un branchement spécifique juste après le nettoyage, c'est-à-dire après le nettoyage (par défaut, la phase de nettoyage). Cela a fonctionné pour moi avec l'indigo eclipse. Un plugin spécifique peut avoir utilisé certaines dépendances du pom principal? IIRC c'était un plugin basé sur Vaadin.
Charith De Silva
2

J'ai pu résoudre le même problème avec maven-antrun-plugin et jaxb2-maven-plugin dans Eclipse Kepler 4.3 en appliquant cette solution: http://wiki.eclipse.org/M2E_plugin_execution_not_covered#Eclipse_4.2_add_default_mapping
Donc le contenu de mon% elipse_workspace_name% /. metadata / .plugins / org.eclipse.m2e.core / lifecycle-mapping-metadata.xml se présente comme suit:

<?xml version="1.0" encoding="UTF-8"?>
<lifecycleMappingMetadata>
  <pluginExecutions>
    <pluginExecution>
      <pluginExecutionFilter>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-antrun-plugin</artifactId>
        <versionRange>1.3</versionRange>
        <goals>
          <goal>run</goal>
        </goals>
      </pluginExecutionFilter>
      <action>
        <ignore />
      </action>
    </pluginExecution>
    <pluginExecution>
      <pluginExecutionFilter>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>jaxb2-maven-plugin</artifactId>
        <versionRange>1.2</versionRange>
        <goals>
          <goal>xjc</goal>
        </goals>
      </pluginExecutionFilter>
      <action>
        <ignore />
      </action>
    </pluginExecution>
  </pluginExecutions>
</lifecycleMappingMetadata>

* J'ai dû redémarrer Eclipse pour voir les erreurs disparues.

Éros
la source
1

À partir de la version 0.12 de Maven Eclipse (m2e), tous les objectifs du cycle de vie de Maven doivent correspondre à une extension m2e installée. Dans ce cas, le maven-ear-pluginavait un objectif non mappé default-generate-application-xml.

Vous pouvez exclure des objectifs de cycle de vie non mappés en suivant simplement les instructions ici:

https://wiki.eclipse.org/M2E_plugin_execution_not_covered

Sinon, cliquez simplement avec le bouton droit sur le message d'erreur dans Eclipse et choisissez Quick Fix-> Ignore for every pom with such errors.

Vous devez être prudent lorsque vous ignorez les objectifs du cycle de vie: généralement, les objectifs font quelque chose d'utile et si vous les configurez pour qu'ils soient ignorés dans Eclipse, vous risquez de manquer des étapes de construction importantes. Vous pouvez également envisager d'ajouter la prise en charge de l'extension EAR Maven Eclipse pour l'objectif de cycle de vie non mappé.

Ricardo Gladwell
la source
0

Avec le mécanisme expliqué dans la réponse de Jan, j'ai demandé au pluging m2e d'ignorer l'objectif "generate-application-xml". Cela élimine l'erreur et semble fonctionner puisque m2e crée application.xml.

Donc, fondamentalement, l'erreur nous a obligés à décider quel mécanisme est en charge pour générer application.xml lorsque la construction Maven s'exécute dans Eclipse sous le contrôle du plugin m2e. Et nous avons décidé que m2e était en charge.

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-ear-plugin</artifactId>
            <version>2.6</version>
            <configuration>
                <version>6</version>
                <defaultLibBundleDir>lib</defaultLibBundleDir>
            </configuration>
        </plugin>
    </plugins>
    <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>org.apache.maven.plugins</groupId>
                                    <artifactId>maven-ear-plugin</artifactId>
                                    <versionRange>[2.1,)</versionRange>
                                    <goals>
                                        <goal>generate-application-xml</goal>
                                    </goals>
                                </pluginExecutionFilter>
                                <action>
                                    <ignore></ignore>
                                </action>
                            </pluginExecution>
                        </pluginExecutions>
                    </lifecycleMappingMetadata>
                </configuration>
            </plugin>**
        </plugins>
    </pluginManagement>
</build>
StaticNoiseLog
la source
0

Vous devez comprendre le contenu de M2E_plugin_execution_not_covered et suivre les étapes mentionnées ci-dessous:

  • Choisissez le jar org.eclipse.m2e.lifecyclemapping.defaults dans le dossier du plugin eclipse
  • Extrayez-le et ouvrez lifecycle-mapping-metadata.xml où vous pouvez trouver toutes les exécutions de plugin.
  • Ajoutez le pluginExécutions de vos plugins qui sont affichés comme des erreurs avec des balises <ignore/>sous <action>.

Par exemple: pour l'erreur write-project-properties, ajoutez cet extrait sous la <pluginExecutions>section du fichier lifecycle-mapping-metadata.xml:

 <pluginExecution>
    <pluginExecutionFilter>
       <groupId>org.codehaus.mojo</groupId>
       <artifactId>properties-maven-plugin</artifactId>
       <versionRange>1.0-alpha-2</versionRange>
       <goals>
         <goal>write-project-properties</goal>
       </goals>
    </pluginExecutionFilter>
     <action>
       <ignore />
     </action>
   </pluginExecution>
  • Remplacez ce fichier XML dans le JAR
  • Remplacez le JAR mis à jour dans le dossier du plugin d'Eclipse
  • Redémarrez Eclipse

Vous ne devriez voir aucune erreur à l'avenir pour aucun projet.

Gowtham
la source
0

Même si la question est trop ancienne, mais j'aimerais partager la solution qui a fonctionné pour moi car j'ai déjà tout vérifié en ce qui concerne cette erreur. C'était pénible, j'ai passé deux jours à essayer et à la fin la solution était:

mettre à jour le plugin M2e dans eclipse

nettoyer et reconstruire

William Kinaan
la source