2012-01-02 10 views
148

tengo una bastante simple proyecto Maven:experto-dependencia-plugin (metas "Copy-dependencias", "desempaquetar") no es compatible con M2e

<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, me sale 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 lo hace, y eso es todo lo que realmente me importa. ¿Cómo puedo obtener este error en mi proyecto para irme?

+4

Estos días M2e proporciona una quickfix añadir la configuración apropiada de su pom.xml para hacer caso omiso de M2e el objetivo no compatible. –

+0

@ ThorbjørnRavnAndersen, ¿cuál es la solución rápida? –

+1

@MuhammadGelbana En Eclipse, una "solución rápida" significa: poner el cursor sobre el problema; presione Ctrl-1; Elija la solución rápida. –

Respuesta

158

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

Opción 1: pom.xml

Añadir la 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> 

Usted tendrá que hacer Maven ... -> Proyecto de configuración de actualización en su proyecto después de este .

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

Opción 2: Global Eclipse Anular

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

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

En Eclipse/Preferences/Maven/Lifecycle Mappings de exploración para este archivo y haga clic en OK:

Eclipse Settings

+7

¿Qué sucede si las dependencias de copia son un paso vital en la construcción de su archivo WAR? Estoy trabajando con monstrosity la llamada m2Eclipse e incluso si cambias la acción para ejecutar, los archivos vitales no se copian en la carpeta de destino ... – PhoneTech

+1

Para la configuración de ignorar generada automáticamente, @PhoneTech, m2e agrega el comentario * "La configuración de este complemento se usa para almacenar configuraciones de Eclipse m2e solamente. No tiene influencia en la construcción de Maven. "* Sin embargo, no estoy seguro de lo que significa, ya que está diciendo que las cosas no se copian por usted. – Arjan

+6

Sí, ayudó ... pero eso es una gran cantidad de código para deshacerse de una advertencia: P – dokaspar

38

Si copia dependencias, desempaquetar, paquete, etc., son importantes para su proyecto no debe ignorarlo. Usted tiene que incluir su <plugins> en <pluginManagement> probado con Eclipse Indigo SR1, Maven 2.2.1

+4

Gracias, también ayuda en Eclipse Indigo SR2 – stemm

+1

Estoy un poco perdido ... ¿Eso significa usar el código anterior pero con '' en lugar de ''? ¡Gracias! – xverges

+2

También funciona en Juno. –

57

Se trata de un problema de M2E para Eclipse M2E plugin execution not covered.

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 del build. Esto eliminará el error y hará que M2E reconozca el objetivo copy-depencies de maven-dependency-plugin y hará que el POM funcione como se esperaba, copiando dependencias en la carpeta cada vez que Eclipse lo construya. Si solo quiere ignorar el error, entonces cambie <execute /> por <ignore />. No es necesario que encierre su maven-dependency-plugin en 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> 
+4

Esto lo resuelve de hecho. Y estaba siendo estúpido, pensando que cuando las personas hablaban de mover '' en' 'uno debería mover el' org.apache.maven.plugins maven-dependency-plugin 'allí. Pero se trata del ' org.eclipse.m2e ciclo de vida-mapeo' que debe estar incluido en ''. Al usar Quick Fix en Eclipse, se agrega lo mismo * arriba * del '' normal, y parece que la ubicación también funciona bien. La clave es entonces cambiar '' en ''. Bonito. – Arjan

+1

Encontré que necesitaba false dentro de la ejecución como se recomienda en el enlace que proporcionó. Gracias por la respuesta, me puso en el camino correcto. –

+0

No es necesario agregar esto DESPUÉS de sus 'plugins' dentro de' build', puede agregar esto antes. –

0

Sé que esto es antiguo puesto, pero me ha costado hoy con este problema también, y he usado 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 bajo m2e 1.3.1.

cuando traté de utilizar

<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 me dio m2e error.

+0

Sí, este es exactamente el propósito de esta entrada: m2e ahora requiere _connectors_ para asignar ejecuciones de complementos en el ciclo de vida de compilación de Eclipse.
Incluso en el momento de escribir mis comentarios, m2e solo admite algunos de esos conectores: debe usar el plugin Maven 'lifecycle-mapping' para instruir a m2e sobre cómo lidiar con un plugin no compatible (aquí el' maven-dependency- plugin') –

7

A pesar de respuesta de CaioToOn anterior, todavía tenía problemas para conseguir que esto funcione inicialmente.

Después de varios intentos, finalmente funcionó. 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> 
+0

¿Puede por favor proporcionar 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 ... ni siquiera estoy seguro (intenté muchas cosas).

Con todos los problemas que tenía, decidí pasar a Eclipse de Luna, y las soluciones anteriores no funcionó para mí.

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

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

0

Otra opción es navegar a la pestaña de problemas, haga clic derecho en caso de error, haga clic en Aplicar solución rápida. Debe generar el código ignorar xml y aplicarlo .pom para usted.

13

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

Aquí es cómo usted lo haría en Eclipse:

  1. vaya a ventana/Preferencias/Maven/Descubrimiento/
  2. entrar en el catálogo URL: http://download.eclipse.org/technology/m2e/discovery/directory-1.4.xml
  3. clic en Abrir Catálogo
  4. elegir el M2e-maven-dependencia-plugin
  5. disfrutar
+1

+1 para la respuesta CORRECTA. Solo recuerde realizar una pequeña edición en el archivo 'pom.xml' después de instalar el complemento, de lo contrario, es posible que el error no desaparezca. –

+0

En Eclipse Luna, el URL del catálogo es http://download.eclipse.org/technology/m2e/discovery/directory-1.5.xml – lazlev

+0

¡Intenté esto pero los campos de la URL del catálogo no son editables! El mío está configurado para: http://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

Cuestiones relacionadas