maven-dependency-plugin (buts «copy-dependencies», «unpack») n'est pas pris en charge par m2e


155

J'ai un projet Maven assez simple:

<project>
    <dependencies>
        ...
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>2.4</version>
                <executions>
                    <execution>
                        <id>copy-dependencies</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${project.build.directory}/dependencies</outputDirectory>
                        </configuration>    
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

Cependant, j'obtiens l'erreur suivante dans m2eclipse:

Description Resource    Path    Location    Type
maven-dependency-plugin (goals "copy-dependencies", "unpack") is not supported by m2e. pom.xml  /jasperreports-test line 60 Maven Project Build Lifecycle Mapping Problem

Pourquoi est-ce que je me soucie si m2eclipse ne "prend pas en charge" cette tâche? Maven le fait, et c'est tout ce qui me tient vraiment à cœur. Comment puis-je faire disparaître cette erreur dans mon projet?


4
De nos jours, m2e fournit un correctif rapide pour ajouter la configuration appropriée à votre pom.xml pour que m2e ignore l'objectif non pris en charge.
Thorbjørn Ravn Andersen

@ ThorbjørnRavnAndersen, quelle est la solution miracle?
Muhammad Gelbana

1
@MuhammadGelbana Dans Eclipse, une "solution rapide" signifie: placez le curseur sur le problème; appuyez sur Ctrl-1; Choisissez Quick Fix.
Thorbjørn Ravn Andersen

Réponses:


164

Cela semble être un problème connu. Vous pouvez demander à m2e d'ignorer cela.

Option 1: pom.xml

Ajoutez ce qui suit à l'intérieur de votre <build/>balise:

<pluginManagement>
<plugins>
    <!-- Ignore/Execute plugin execution -->
    <plugin>
        <groupId>org.eclipse.m2e</groupId>
        <artifactId>lifecycle-mapping</artifactId>
        <version>1.0.0</version>
        <configuration>
            <lifecycleMappingMetadata>
                <pluginExecutions>
                    <!-- copy-dependency plugin -->
                    <pluginExecution>
                        <pluginExecutionFilter>
                            <groupId>org.apache.maven.plugins</groupId>
                            <artifactId>maven-dependency-plugin</artifactId>
                            <versionRange>[1.0.0,)</versionRange>
                            <goals>
                                <goal>copy-dependencies</goal>
                            </goals>
                        </pluginExecutionFilter>
                        <action>
                            <ignore />
                        </action>
                    </pluginExecution>
                </pluginExecutions>
            </lifecycleMappingMetadata>
        </configuration>
    </plugin>
   </plugins></pluginManagement>

Vous devrez faire Maven ... -> Mettre à jour la configuration du projet sur votre projet après cela.

En savoir plus: http://wiki.eclipse.org/M2E_plugin_execution_not_covered#m2e_maven_plugin_coverage_status

Option 2: remplacement global de l'éclipse

Pour éviter de modifier vos fichiers POM, le remplacement d'ignorer peut être appliqué à l'ensemble de l'espace de travail via les paramètres Eclipse.

Enregistrez ce fichier quelque part sur le disque: https://gist.github.com/maksimov/8906462

Dans Eclipse/Preferences/Maven/Lifecycle Mappingsrecherchez ce fichier et cliquez sur OK:

Paramètres Eclipse


10
Et si les dépendances de copie étaient une étape vitale dans la création de votre fichier WAR? Je travaille avec monstruosité l'appel m2Eclipse et même si je change l'action à exécuter, les fichiers vitaux ne sont pas copiés dans le dossier cible ...
bartv

1
Pour les paramètres Ignorer générés automatiquement, @PhoneTech, m2e ajoute le commentaire "La configuration de ce plugin est utilisée pour stocker uniquement les paramètres Eclipse m2e. Elle n'a aucune influence sur la construction de Maven elle-même." Je ne sais pas ce que cela signifie cependant, car vous dites que les choses ne sont pas copiées pour vous.
Arjan

6
Oui, cela a aidé ... mais c'est énormément de code pour se débarrasser d'un avertissement: P
dokaspar

Cela me donne toujours un avertissement, mais l'erreur a disparu.
stevecross

57

Il s'agit d'un problème d' exécution du plugin M2E pour Eclipse M2E non couvert .

Pour résoudre ce problème, tout ce que vous avez à faire est de cartographier le cycle de vie qu'il ne reconnaît pas et de demander à M2E de l'exécuter.

Vous devez ajouter ceci après votre plugins, dans le fichier build. Cela permettra d' éliminer l'erreur et de faire reconnaître M2E le but copy-depenciesde maven-dependency-pluginet rendre le travail POM comme prévu, la copie des dépendances dans le dossier chaque fois Eclipse construire. Si vous voulez simplement ignorer l'erreur, vous changez <execute />pour <ignore />. Pas besoin d'enfermer votre maven-dependency-plugindans pluginManagement, comme suggéré précédemment.

<pluginManagement>
  <plugins>
    <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-dependency-plugin</artifactId>
                <versionRange>[2.0,)</versionRange>
                <goals>
                  <goal>copy-dependencies</goal>
                </goals>
              </pluginExecutionFilter>
              <action>
                <execute />
              </action>
            </pluginExecution>
          </pluginExecutions>
        </lifecycleMappingMetadata>
      </configuration>
    </plugin>
  </plugins>
</pluginManagement>

4
Cela le résout en effet. Et j'étais stupide, pensant que lorsque les gens parlaient d'emménager <plugins>dans l' <pluginManagement>un d'eux, je devais en fait emménager <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId>là-dedans. Mais c'est dans ce <groupId>org.eclipse.m2e</groupId> <artifactId>lifecycle-mapping</artifactId>qui doit être inclus <pluginManagement>. Lors de l'utilisation de Quick Fix dans Eclipse, le même est ajouté au - dessus de la normale <plugins>, et il semble que l'emplacement fonctionne bien aussi. La clé est alors de changer <ignore>en <execute>. Agréable.
Arjan

1
J'ai trouvé que j'avais besoin de <runOnIncremental> false </runOnIncremental> dans exécuter comme recommandé sur le lien que vous avez fourni. Merci pour la réponse m'a mis sur la bonne voie.
cyber-monk

Il n'est pas nécessaire d'ajouter ceci APRÈS votre pluginsintérieur build, vous pouvez l'ajouter avant.
Fagner Brack

38

Si les dépendances de copie, décompresser, emballer, etc. sont importants pour votre projet, vous ne devez pas les ignorer. Vous devez joindre votre <plugins>in <pluginManagement>testé avec Eclipse Indigo SR1, maven 2.2.1


4
Merci, cela aide également dans Eclipse Indigo SR2
tige

1
Je suis un peu perdu ... Cela signifie-t-il utiliser le code ci-dessus mais avec <execute />au lieu de <ignore />? Merci!
xverges

1
Voulez-vous expliquer un peu plus? Le simple fait de mettre un <plugin>en <pluginManagement>mais toujours de le référencer pour faire son travail me donne toujours le même avertissement.
Arjan

@CaioToOn, peut-être en savez-vous plus ...? Après l'avoir ajouté, <pluginManagement>je dois encore ajouter une ligne 2 "régulière" <build><plugins><plugin>..., référençant celle configurée dans <pluginManagement>, non? (Je vois toujours Juno se plaindre de la même chose, une fois <pluginManagement>
entré

@Arjan vous devez joindre votre pluginstag pluginManagement. Mais jetez un œil à la réponse que j'ai donnée ci-dessous, stackoverflow.com/a/12109018/179138 . Celui suggéré ignore l'exécution, mais n'exécute pas le plugin sur Eclipse.
Caio Cunha

16

Pour le faire fonctionner, au lieu de l'ignorer, vous pouvez installer le connecteur m2e pour le plugin maven-dependency-plugin:
https://github.com/ianbrandt/m2e-maven-dependency-plugin

Voici comment vous le feriez dans Eclipse:

  1. allez dans Fenêtre / Préférences / Maven / Découverte /
  2. entrez l'URL du catalogue: http://download.eclipse.org/technology/m2e/discovery/directory-1.4.xml
  3. cliquez sur Ouvrir le catalogue
  4. choisissez le plugin m2e-maven-dependency-plugin
  5. prendre plaisir

1
+1 pour la bonne réponse. N'oubliez pas d'apporter une petite modification au pom.xmlfichier après l'installation du plugin, sinon l'erreur risque de ne pas disparaître.
Fagner Brack


J'ai essayé cela mais les champs URL du catalogue ne sont pas modifiables! Le mien est défini sur: download.eclipse.org/technology/m2e/discovery/directory.xml (c'est-à-dire sans le -1.4) à la fin. Des idées, comment / où peut-on régler cela?
mmo

8

Malgré la réponse de CaioToOn ci-dessus, j'ai toujours eu des problèmes pour que cela fonctionne au départ.

Après plusieurs tentatives, il a finalement fonctionné. Je colle ma version finale ici - en espérant que cela profitera à quelqu'un d'autre.

    <build> 
        <plugins>
            <!--
            Copy all Maven Dependencies (-MD) into libMD/ folder to use in classpath via shellscript
             --> 
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>2.8</version>
                <executions>
                    <execution>
                        <id>copy</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${project.build.directory}/libMD</outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
        <!--  
        Above maven-dependepcy-plugin gives a validation error in m2e. 
        To fix that, add the plugin management step below. Per: http://stackoverflow.com/a/12109018
        -->
        <pluginManagement>
            <plugins>
                <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-dependency-plugin</artifactId>
                                        <versionRange>[2.0,)</versionRange>
                                        <goals>
                                            <goal>copy-dependencies</goal>
                                        </goals>
                                    </pluginExecutionFilter>
                                    <action>
                                        <execute />
                                    </action>
                                </pluginExecution>
                            </pluginExecutions>
                        </lifecycleMappingMetadata>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>

Pouvez-vous s'il vous plaît fournir l'objectif à exécuter dans eclipse?
Jess

1

J'ai eu le même problème en essayant de charger le projet Hadoop dans eclipse. J'ai essayé les solutions ci-dessus, et je pense que cela aurait pu fonctionner dans Eclipse Kepler ... pas même plus sûr (essayé trop de choses).

Avec tous les problèmes que j'avais, j'ai décidé de passer à Eclipse Luna, et les solutions ci-dessus n'ont pas fonctionné pour moi.

Un autre article recommandait de changer la balise ... en package. J'ai commencé à faire cela, et cela "effacerait" les erreurs ... Cependant, je commence à penser que les changements me mordraient plus tard - je ne suis pas un expert de Maven.

Heureusement, j'ai découvert comment supprimer toutes les erreurs. Allez dans Fenêtre-> Préférences-> Maven-> Erreur / Avertissements et changez l'option "Exécution du plugin non couverte par le cycle de vie ..." en "Ignorer". J'espère que ça aide.


0

Je sais que c'est un ancien article, mais j'ai également lutté aujourd'hui avec ce problème et j'ai utilisé le modèle de cette page: http://maven.apache.org/plugins/maven-dependency-plugin/usage.html

<project>
  [...]
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <version>2.7</version>
        <executions>
          <execution>
            <id>copy</id>
            <phase>package</phase>
            <goals>
              <goal>copy</goal>
            </goals>
            <configuration>
              <artifactItems>
                <artifactItem>
                  <groupId>[ groupId ]</groupId>
                  <artifactId>[ artifactId ]</artifactId>
                  <version>[ version ]</version>
                  <type>[ packaging ]</type>
                  <classifier> [classifier - optional] </classifier>
                  <overWrite>[ true or false ]</overWrite>
                  <outputDirectory>[ output directory ]</outputDirectory>
                  <destFileName>[ filename ]</destFileName>
                </artifactItem>
              </artifactItems>
              <!-- other configurations here -->
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
  [...]
</project>

et tout fonctionne bien sous m2e1.3.1.

Quand j'ai essayé d'utiliser

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <version>2.4</version>
            <executions>
                <execution>
                    <id>copy-dependencies</id>
                    <phase>package</phase>
                    <goals>
                        <goal>copy-dependencies</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>${project.build.directory}/dependencies</outputDirectory>
                    </configuration>    
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

J'ai aussi eu une m2eerreur.


Oui, c'est exactement le but de cette entrée: m2e nécessite désormais des connecteurs pour mapper les exécutions de plugins dans le cycle de vie de construction d'Eclipse. <br/> Même au moment de la rédaction de mon commentaire, m2e ne supporte que quelques-uns de ces connecteurs: vous devez utiliser le lifecycle-mappingplugin Maven pour indiquer à m2e comment gérer un plugin non supporté (ici le maven-dependency-plugin)
Olivier B.

0

Une autre option consiste à accéder à l'onglet problèmes, à cliquer avec le bouton droit sur l'erreur, à cliquer sur appliquer une correction rapide. Le devrait générer le code xml ignorer et l'appliquer au fichier .pom pour vous.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.