maven-dependency-plugin (obiettivi "copia-dipendenze", "decomprimere") non è supportato da m2e


155

Ho un progetto Maven abbastanza semplice:

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

Tuttavia, ottengo il seguente errore in 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

Perché mi interessa se m2eclipse non "supporta" questa attività? Maven lo fa, e questo è tutto ciò che mi interessa davvero. Come posso eliminare questo errore nel mio progetto?


4
In questi giorni m2e fornisce una soluzione rapida per aggiungere la configurazione appropriata al tuo pom.xml per fare in modo che m2e ignori l'obiettivo non supportato.
Thorbjørn Ravn Andersen,

@ ThorbjørnRavnAndersen, qual è la soluzione rapida?
Muhammad Gelbana,

1
@MuhammadGelbana In Eclipse una "soluzione rapida" significa: posizionare il cursore sul problema; premi Ctrl-1; Scegli Correzione rapida.
Thorbjørn Ravn Andersen,

Risposte:


164

Sembra essere un problema noto. Puoi dare istruzioni a m2e di ignorarlo.

Opzione 1: pom.xml

Aggiungi quanto segue nel <build/>tag:

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

Dopo questo dovrai eseguire Maven ... -> Aggiorna la configurazione del progetto sul tuo progetto.

Per saperne di più: http://wiki.eclipse.org/M2E_plugin_execution_not_covered#m2e_maven_plugin_coverage_status

Opzione 2: Global Eclipse Override

Per evitare di modificare i file POM, l'override ignore può essere applicato all'intero spazio di lavoro tramite le impostazioni di Eclipse.

Salvare questo file da qualche parte sul disco: https://gist.github.com/maksimov/8906462

In Eclipse/Preferences/Maven/Lifecycle Mappingscerca questo file e fai clic su OK:

Impostazioni Eclipse


10
Cosa succede se le dipendenze dalla copia sono un passaggio fondamentale nella creazione del file WAR? Sto lavorando con mostruosità la chiamata m2Eclipse e anche se cambiando l'azione da eseguire, i file vitali non vengono copiati nella cartella di destinazione ...
Bart

1
Per le impostazioni di ignoramento generate automaticamente, @PhoneTech, m2e aggiunge il commento "La configurazione di questo plug-in viene utilizzata per memorizzare solo le impostazioni di Eclipse m2e. Non ha alcuna influenza sulla build di Maven stessa". Non sono sicuro di cosa significhi, poiché stai dicendo che le cose non vengono copiate per te.
Arjan,

6
Sì, ha aiutato ... ma è un sacco di codice per sbarazzarsi di un avvertimento: P
dokaspar

Questo mi dà ancora un avvertimento, ma l'errore scompare.
Stevecross,

57

Questo è un problema di M2E per l' esecuzione del plugin Eclipse M2E non coperta .

Per risolvere questo problema, tutto ciò che devi fare è mappare il ciclo di vita che non riconosce e incaricare M2E di eseguirlo.

Dovresti aggiungere questo dopo il tuo plugins, all'interno di build. Questo eliminerà l'errore ed effettuare M2E riconoscere l'obiettivo copy-depenciesdella maven-dependency-plugine rendere il lavoro POM come previsto, la copia di dipendenze in cartella ogni volta Eclipse costruirlo. Se vuoi semplicemente ignorare l'errore, allora cambi <execute />per <ignore />. Non c'è bisogno di racchiuderlo maven-dependency-pluginin pluginManagement, come suggerito prima.

<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
Questo lo risolve davvero. E stavo facendo lo stupido, pensando che quando le persone stavano parlando di trasferirsi <plugins>in <pluginManagement>uno di loro, in realtà, avrebbero dovuto spostarsi <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId>lì dentro. Ma si tratta di <groupId>org.eclipse.m2e</groupId> <artifactId>lifecycle-mapping</artifactId>ciò che deve essere racchiuso in <pluginManagement>. Quando si utilizza la correzione rapida in Eclipse, lo stesso viene aggiunto sopra il normale <plugins>e sembra che anche la posizione funzioni bene. La chiave è quindi cambiare <ignore>in <execute>. Bello.
Arjan,

1
Trovato che avevo bisogno di <runOnIncremental> false </runOnIncremental> all'interno di eseguire come raccomandato sul collegamento fornito. Grazie per la risposta mi ha messo sulla strada giusta.
cyber-monaco,

Non è necessario aggiungerlo DOPO il tuo pluginsinterno build, puoi aggiungerlo prima.
Fagner Brack

38

Se dipendenze da copia, decompressione, impacchettamento, ecc. Sono importanti per il tuo progetto, non dovresti ignorarlo. È necessario allegare il <plugins>in <pluginManagement>testata con Eclipse Indigo SR1, Maven 2.2.1


4
Grazie, aiuta anche in Eclipse Indigo SR2
stemm

1
Mi sono perso un po '... Significa usare il codice sopra ma con <execute />invece di <ignore />? Grazie!
xverges

1
Vuoi spiegarci un po 'di più? Basta inserire un <plugin>in <pluginManagement>ma ancora fare riferimento a esso per fare il suo lavoro, mi dà ancora lo stesso avvertimento.
Arjan,

@CaioToOn, forse ne conosci ancora un po '...? Dopo averlo aggiunto a, <pluginManagement>devo ancora aggiungere anche una "normale" linea 2 <build><plugins><plugin>..., facendo riferimento a quella configurata in <pluginManagement>, giusto? (Sempre vedendo Giunone lamentarsi della stessa cosa, quando dentro <pluginManagement>.)
Arjan,

@Arjan con cui dovresti racchiudere il tuo pluginstag pluginManagement. Ma dai un'occhiata alla risposta che ho dato di seguito, stackoverflow.com/a/12109018/179138 . Quello suggerito ignora l'esecuzione, ma non eseguire il plugin su Eclipse.
Caio Cunha,

16

Per farlo funzionare, invece di ignorarlo, puoi installare il connettore m2e per il plugin maven-dependency:
https://github.com/ianbrandt/m2e-maven-dependency-plugin

Ecco come lo faresti in Eclipse:

  1. vai su Finestra / Preferenze / Maven / Discovery /
  2. inserisci l'URL del catalogo: http://download.eclipse.org/technology/m2e/discovery/directory-1.4.xml
  3. fai clic su Apri catalogo
  4. scegli il plug-in m2e-maven-dependency
  5. godere

1
+1 per la risposta GIUSTA. Ricorda di apportare una piccola modifica al pom.xmlfile dopo aver installato il plug-in, altrimenti l'errore potrebbe non scomparire.
Fagner Brack,


Ho provato questo ma i campi dell'URL del catalogo non sono modificabili! Il mio è impostato su: download.eclipse.org/technology/m2e/discovery/directory.xml (ovvero senza -1.4) alla fine. Qualche idea, come / dove si potrebbe adattarlo?
mmo

8

Nonostante la risposta di CaioToOn sopra, ho ancora avuto problemi a farlo funzionare inizialmente.

Dopo diversi tentativi, finalmente è riuscito a farlo funzionare. Sto incollando qui la mia versione finale, sperando che possa essere di beneficio a qualcun altro.

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

Potete per favore fornire l'obiettivo di eseguire in eclissi?
Jess,

1

Ho avuto lo stesso problema durante il tentativo di caricare il progetto Hadoop in eclissi. Ho provato le soluzioni sopra e credo che avrebbe funzionato in Eclipse Kepler ... non ne sono più sicuro (ho provato troppe cose).

Con tutti i problemi che ho avuto, ho deciso di passare a Eclipse Luna e le soluzioni sopra non hanno funzionato per me.

C'era un altro post che raccomandava di cambiare il ... tag in pacchetto. Ho iniziato a farlo, e questo avrebbe "eliminato" gli errori ... Tuttavia, comincio a pensare che i cambiamenti mi avrebbero morso in seguito - Non sono un esperto di Maven.

Fortunatamente, ho scoperto come rimuovere tutti gli errori. Vai a Finestra-> Preferenze-> Maven-> Errore / Avvertenze e modifica l'opzione "Esecuzione plug-in non coperta dal ciclo di vita ..." in "Ignora". Spero che sia d'aiuto.


0

So che questo è un vecchio post, ma oggi ho lottato anche con questo problema e ho usato il modello da questa pagina: 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>

e tutto funziona bene al punto m2e1.3.1.

Quando ho provato ad usare

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

Ho anche avuto un m2eerrore.


Sì, questo è esattamente lo scopo di questa voce: m2e ora richiede i connettori per mappare le esecuzioni dei plugin nel ciclo di vita della compilazione di Eclipse. <br/> Anche al momento della mia scrittura del commento, m2e supporta solo alcuni di questi connettori: devi usare il lifecycle-mappingplugin Maven per istruire m2e su come gestire un plugin non supportato (qui il maven-dependency-plugin)
Olivier B.

0

Un'altra opzione è quella di passare alla scheda problemi, fare clic con il tasto destro sull'errore, fare clic su applica correzione rapida. Dovrebbe generare il codice xml ignore e applicarlo al tuo file .pom.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.