maven-dependency-plugin (objetivos "copiar-dependencias", "descomprimir") no es compatible con m2e

155

Tengo un proyecto Maven bastante 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>

Sin embargo, aparece el siguiente error en 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

¿Por qué me importa si m2eclipse no "admite" esta tarea? Maven sí, y eso es todo lo que realmente me importa. ¿Cómo puedo hacer que este error en mi proyecto desaparezca?

Naftuli Kay
fuente
44
En estos días, m2e proporciona una solución rápida para agregar la configuración adecuada a su pom.xml para hacer que m2e ignore el objetivo no admitido.
Thorbjørn Ravn Andersen
@ ThorbjørnRavnAndersen, ¿cuál es la solución rápida?
Muhammad Gelbana
1
@MuhammadGelbana En Eclipse, una "solución rápida" significa: poner el cursor sobre el problema; presione Ctrl-1; Elija Quick Fix.
Thorbjørn Ravn Andersen

Respuestas:

164

Parece ser un problema conocido. Puede indicar a m2e que ignore esto.

Opción 1: pom.xml

Agregue lo siguiente dentro de su <build/>etiqueta:

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

Tendrá que hacer Maven ... -> Actualizar la configuración del proyecto en su proyecto después de esto.

Leer más: http://wiki.eclipse.org/M2E_plugin_execution_not_covered#m2e_maven_plugin_coverage_status

Opción 2: Anulación de eclipse global

Para evitar cambiar sus archivos POM, la anulación de ignorar se puede aplicar a todo el espacio de trabajo a través de la configuración de Eclipse.

Guarde este archivo en algún lugar del disco: https://gist.github.com/maksimov/8906462

En Eclipse/Preferences/Maven/Lifecycle Mappingsbuscar este archivo y haga clic en Aceptar:

Configuraciones de Eclipse

maksimov
fuente
10
¿Qué pasa si las dependencias de copia son un paso vital en la construcción de su archivo WAR? Estoy trabajando con la llamada monstruosidad m2eclipse e incluso si se cambia la acción a ejecutar, los archivos vitales no se copian en la carpeta de destino ...
bartv
1
Para configuraciones de ignorar generadas automáticamente, @PhoneTech, m2e agrega el comentario "La configuración de este complemento se usa para almacenar configuraciones de Eclipse m2e únicamente. No tiene influencia en la compilación de Maven". Sin embargo, no estoy seguro de qué significa eso, ya que estás diciendo que las cosas no se copian por ti.
Arjan
66
Sí, ayudó ... pero ese es un código horrible para deshacerse de una advertencia: P
dokaspar
Esto todavía me da una advertencia, pero el error desapareció.
stevecross
57

Este es un problema de M2E para la ejecución del complemento Eclipse M2E no cubierto .

Para resolver este problema, todo lo que tiene que hacer es mapear el ciclo de vida que no reconoce e indicarle a M2E que lo ejecute.

Debe agregar esto después de su plugins, dentro de build. Esto eliminará el error y hacer M2E reconocer el objetivo copy-depenciesde maven-dependency-pluginy hacer el trabajo POM como se esperaba, la copia de las dependencias a la carpeta cada vez que Eclipse construirlo. Si solo quieres ignorar el error, entonces cambia <execute />por <ignore />. No hay necesidad para encerrar su maven-dependency-pluginen pluginManagement, como se sugirió anteriormente.

<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
fuente
44
Esto lo resuelve de hecho. Y estaba siendo estúpido, pensando que cuando la gente hablaba de mudarse <plugins>a <pluginManagement>uno en realidad debería moverlo <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId>allí. Pero se trata de lo <groupId>org.eclipse.m2e</groupId> <artifactId>lifecycle-mapping</artifactId>que debe incluirse <pluginManagement>. Cuando se usa Quick Fix en Eclipse, se agrega lo mismo sobre el normal <plugins>, y parece que la ubicación también funciona bien. Clave es entonces al cambio <ignore>en <execute>. Agradable.
Arjan
1
Encontré que necesitaba <runOnIncremental> false </runOnIncremental> dentro de ejecutar como se recomienda en el enlace que proporcionó. Gracias por la respuesta me puso en el camino correcto.
cyber-monk
No es necesario agregar esto DESPUÉS de su pluginsinterior build, puede agregar esto antes.
Fagner Brack
38

Si las dependencias de copia, desempaquetar, empacar, etc., son importantes para su proyecto, no debe ignorarlo. Usted tiene que incluir su <plugins>en <pluginManagement>probó con Eclipse Indigo SR1, maven 2.2.1

usuario311174
fuente
44
Gracias, también ayuda en Eclipse Indigo SR2
stemm
1
Estoy un poco perdido ... ¿Eso significa usar el código anterior pero con en <execute />lugar de <ignore />? ¡Gracias!
xverges
1
¿Te importaría explicar un poco más? Simplemente poniendo una <plugin>dentro <pluginManagement>, pero todavía hace referencia a que haga su trabajo, todavía me da la misma advertencia.
Arjan
@CaioToOn, ¿tal vez sabes algo más ...? Después de agregarlo, <pluginManagement>todavía necesito agregar una línea 2 "regular" <build><plugins><plugin>..., haciendo referencia a la que está configurada <pluginManagement>, ¿verdad? (Todavía veo a Juno quejarse de lo mismo, cuando está adentro <pluginManagement>.)
Arjan
@Arjan con el que debe incluir su pluginsetiqueta pluginManagement. Pero eche un vistazo a la respuesta que proporcioné a continuación, stackoverflow.com/a/12109018/179138 . El sugerido ignora la ejecución, pero no ejecute el complemento en Eclipse.
Caio Cunha
16

Para que funcione, en lugar de ignorarlo, puede instalar el conector m2e para el complemento de dependencia de Maven:
https://github.com/ianbrandt/m2e-maven-dependency-plugin

Así es como lo haría en Eclipse:

  1. vaya a Ventana / Preferencias / Maven / Discovery /
  2. ingrese la URL del catálogo: http://download.eclipse.org/technology/m2e/discovery/directory-1.4.xml
  3. haga clic en Abrir catálogo
  4. elija el complemento m2e-maven-dependency
  5. disfrutar
mario
fuente
1
+1 para la respuesta CORRECTA. Solo recuerde hacer una pequeña edición del pom.xmlarchivo después de instalar el complemento, de lo contrario, el error podría no desaparecer.
Fagner Brack
En Eclipse Luna, la URL del catálogo es download.eclipse.org/technology/m2e/discovery/directory-1.5.xml
jansohn
¡Intenté esto pero los campos URL del catálogo no son editables! El mío está configurado en: download.eclipse.org/technology/m2e/discovery/directory.xml (es decir, sin -1.4) al final. Alguna idea, ¿cómo / dónde se podría ajustar eso?
mmo
8

A pesar de la respuesta de CaioToOn arriba, todavía tuve problemas para que esto funcione inicialmente.

Después de múltiples intentos, finalmente lo conseguí funcionando. Estoy pegando mi versión final aquí, esperando que beneficie a alguien más.

    <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
fuente
¿Pueden proporcionarnos el objetivo de ejecutar en eclipse?
Jess
1

Tuve el mismo problema al intentar cargar el proyecto Hadoop en eclipse. Probé las soluciones anteriores, y creo que podría haber funcionado en Eclipse Kepler ... ya ni siquiera estoy seguro (probé demasiadas cosas).

Con todos los problemas que estaba teniendo, decidí pasar a Eclipse Luna, y las soluciones anteriores no me funcionaron.

Hubo otra publicación que recomendó cambiar la etiqueta ... al paquete. Empecé a hacer eso, y "borraría" los errores ... Sin embargo, empiezo a pensar que los cambios me afectarán más tarde, no soy un experto en Maven.

Afortunadamente, descubrí cómo eliminar todos los errores. Vaya a Ventana-> Preferencias-> Maven-> Error / Advertencias y cambie la opción "Ejecución del complemento no cubierta por el ciclo de vida ..." a "Ignorar". Espero eso ayude.

Myluco
fuente
0

Sé que esta es una publicación antigua pero luché hoy con este problema también y utilicé la plantilla de esta página: 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>

y todo funciona bien en m2e1.3.1.

Cuando intenté usar

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

También recibí un m2eerror.

Andna
fuente
Sí, este es exactamente el propósito de esta entrada: m2e ahora requiere conectores para asignar ejecuciones de complementos en el ciclo de vida de la compilación de Eclipse. <br/> Incluso en el momento de escribir mi comentario, m2e solo admite algunos de estos conectores: debe usar el lifecycle-mappingcomplemento Maven para instruir a m2e sobre cómo lidiar con un complemento no compatible (aquí el maven-dependency-plugin)
Olivier B.
0

Otra opción es navegar a la pestaña de problemas, hacer clic derecho en error, hacer clic en aplicar solución rápida. Debería generar el código ignorar xml y aplicarlo .pom archivo para usted.

cielo azul
fuente