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?

Naftuli Kay
la source
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

maksimov
la source
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>
Caio Cunha
la source
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

user311174
la source
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
mario
la source
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
Dans Eclipse Luna, l'URL du catalogue est download.eclipse.org/technology/m2e/discovery/directory-1.5.xml
jansohn
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>
SGB
la source
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.

Myluco
la source
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.

Andna
la source
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.

ciel bleu
la source