La ejecución del complemento no está cubierta por la configuración del ciclo de vida (arquetipo JBossas 7 EAR)

123

Estoy usando Eclipse 3.7 Indigo con Maven M2E Plugin 1.0.100.

Usando el arquetipo JBoss 7.x JavaEE 6 EAR, el pom para EAR me está dando este error:

La ejecución del complemento no está cubierta por la configuración del ciclo de vida: org.apache.maven.plugins: maven-ear-plugin: 2.6: generate-application-xml (ejecución: default-generate-application-xml, phase: generate-resources)

<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-ear-plugin</artifactId>
   <version>2.6</version>
   <configuration>
      <!-- Tell Maven we are using Java EE 6 -->
      <version>6</version>
      <!-- Use Java EE ear libraries as needed. Java EE ear libraries 
                  are in easy way to package any libraries needed in the ear, and automatically 
                  have any modules (EJB-JARs and WARs) use them -->
      <defaultLibBundleDir>lib</defaultLibBundleDir>
      <modules></modules>
   </configuration>
<plugin>
Oh Chin Boon
fuente

Respuestas:

138

Esta es una "característica" del complemento M2E que se introdujo hace un tiempo. No está directamente relacionado con el complemento JBoss EAR, pero también ocurre con la mayoría de los otros complementos de Maven.

Si tiene una ejecución de complemento definida en su pom(como la ejecución de maven-ear-plugin:generate-application-xml), también necesita agregar información de configuración adicional para M2E que le indique a M2E qué hacer cuando la compilación se ejecuta en Eclipse, por ejemplo, si la ejecución del complemento es ignorada o ejecutada por M2E, si también se debe hacer para compilaciones incrementales, ... Si falta esa información, M2E se queja al mostrar este mensaje de error:

"La ejecución del complemento no está cubierta por la configuración del ciclo de vida"

Consulte aquí para obtener una explicación más detallada y algunas configuraciones de muestra que deben agregarse al pom para que ese error desaparezca:

https://www.eclipse.org/m2e/documentation/m2e-execution-not-covered.html

ene
fuente
70
@ Jan No entiendo el concepto. M2E debe ser transparente para el usuario. Haz lo que hace la línea de comando Maven, pero desde dentro del eclipse. No debería haber en los datos de configuración de pom para decirle a M2E qué hacer. Si lo hace, entonces es un mal diseño. Por cierto, estos errores a veces desaparecen en las versiones más nuevas de Eclipse y M2E.
raptado
8
Estoy de acuerdo con embelesado. Mi POM no depende de m2e y me gustaría agregar uno ahora solo porque uso Eclipse como mi IDE. Eso es una imposición para otros que trabajan en el mismo proyecto que bien podrían estar usando otro IDE como IntelliJ. Si m2e necesita estas sugerencias, debería ser parte de la configuración de m2e dentro de Eclipse.
William
12
Algunas metas no tienen sentido mientras estás en Eclipse. Por ejemplo, tengo proyectos donde los archivos ZIP se descomprimen en la targetcarpeta. No querrá que se vuelva a hacer "incrementalmente" al guardar cada archivo fuente. O tal vez usted no quiere eso. Realmente, m2e no tiene idea de su construcción específica. Puede almacenar lo que m2e debería hacer en Eclipse, POM, o posiblemente instalar un conector m2e que agregue más conocimiento a m2e para manejar el paso de compilación. Estas son las opciones que deberías ver. Entiendo que no desea que su POM sea consciente de m2e, pero es un buen lugar para configurarlo centralmente para todos sus desarrolladores.
Sander Verhagen
3
El problema es que la documentación vinculada para esto, como la mayoría de la documentación en Maven o Eclipse. es abcacadabra. No importa cuánto intenten explicarlo claramente, la explicación se basa en demasiados conceptos que yo, como usuario relativamente nuevo de Maven, no entiendo y no sé cómo buscar, todo lo que encuentro tiene el mismo problema: demasiados inexplicables conceptos. La tecnología es demasiado compleja o la documentación está muy mal organizada. En cualquier caso, la curva de aprendizaje es alta. Las respuestas aquí agregan mucha claridad.
reinierpost
10
@RicardoGladwell Has entendido mal el propósito de los votos negativos. La flecha dice "esta respuesta no es útil", y eso no es cierto de esta respuesta. Entonces, aunque no le guste el tono con el que se escribe esta respuesta, no se solicitó el voto negativo.
Dawood ibn Kareem
43

de todos modos es demasiado tarde, pero mi solución fue simplemente hacer clic derecho en el mensaje de error en Eclipse y elegir Quick Fix >> Ignorar para cada pom con tales errores

java_newbie
fuente
3
No es demasiado tarde. ¡Acabo de solucionar el problema de esta manera!
reinierpost
2
Yo también. Toda esta investigación y tratar de entender cuál era el problema me dio dolor de cabeza, así que lo ignoré :) Gracias.
dleerob
1
Esto funcionó para mí. Sospecho que genera automáticamente lo que se describe en la respuesta de @ Jan que apunta a eclipse.org/m2e/documentation/m2e-execution-not-covered.html porque el único cambio que vi después de aceptar la solución rápida fue un cambio en mi pom. xml.
Michael Osofsky
Intenté nuevamente en otra máquina y el problema desapareció cuando actualicé de JBehave 3.9.4 a 3.9.5 ya que era el complemento JBehave, en mi caso, que estaba creando el error (había generado la configuración del complemento a partir de un arquetipo JBehave Maven ( jbehave.org/reference/stable/archetypes.html ))
Michael Osofsky
30

Eclipse tiene el concepto de compilaciones incrementales. Esto es increíblemente útil ya que ahorra mucho tiempo.

¿Cómo es esto útil?

Digamos que acaba de cambiar un solo archivo .java. Los creadores incrementales podrán compilar el código sin tener que volver a compilar todo (lo que llevará más tiempo).

¿Cuál es el problema con los complementos de Maven?

La mayoría de los complementos de Maven no están diseñados para construcciones incrementales y, por lo tanto, crean problemas para m2e. m2e no sabe si el objetivo del complemento es algo crucial o irrelevante. Si solo ejecuta cada complemento cuando cambia un solo archivo, tomará mucho tiempo.

Esta es la razón por la cual m2e se basa en información de metadatos para descubrir cómo se debe manejar la ejecución. m2e ha presentado diferentes opciones para proporcionar esta información de metadatos y el orden de preferencia es el siguiente (de mayor a menor)

  1. archivo pom.xml del proyecto
  2. padre, abuelo, etc., archivos pom.xml
  3. [m2e 1.2+] preferencias de espacio de trabajo
  4. Extensiones m2e instaladas
  5. [m2e 1.1+] metadatos de mapeo del ciclo de vida proporcionados por el complemento maven
  6. metadatos predeterminados de mapeo del ciclo de vida enviados con m2e

1,2 se refiere a especificar la sección pluginManagement en la etiqueta de su archivo pom o cualquiera de sus padres. M2E lee esta configuración para configurar el proyecto. A continuación, el fragmento indica a m2e que ignore los objetivos jslinty compressdel complemento yuicompressor-maven-plugin

<pluginManagement>
        <plugins>
            <!--This plugin's configuration is used to store Eclipse m2e settings 
                only. It has no influence on the Maven build itself. -->
            <plugin>
                <groupId>org.eclipse.m2e</groupId>
                <artifactId>lifecycle-mapping</artifactId>
                <version>1.0.0</version>
                <configuration>
                    <lifecycleMappingMetadata>
                        <pluginExecutions>
                            <pluginExecution>
                                <pluginExecutionFilter>
                                    <groupId>net.alchim31.maven</groupId>
                                    <artifactId>yuicompressor-maven-plugin</artifactId>
                                    <versionRange>[1.0,)</versionRange>
                                    <goals>
                                        <goal>compress</goal>
                                        <goal>jslint</goal>
                                    </goals>
                                </pluginExecutionFilter>
                                <action>
                                    <ignore />
                                </action>
                            </pluginExecution>
                        </pluginExecutions>
                    </lifecycleMappingMetadata>
                </configuration>
            </plugin>
        </plugins>
    </pluginManagement>

3) En caso de que no prefiera contaminar su archivo pom con estos metadatos, puede almacenarlo en un archivo XML externo (opción 3). A continuación se muestra un archivo de mapeo de muestra que indica a m2e que ignore los objetivos jslinty compressdel complemento yuicompressor-maven-plugin

<?xml version="1.0" encoding="UTF-8"?>
<lifecycleMappingMetadata>
    <pluginExecutions>
        <pluginExecution>
            <pluginExecutionFilter>
                <groupId>net.alchim31.maven</groupId>
                <artifactId>yuicompressor-maven-plugin</artifactId>
                <versionRange>[1.0,)</versionRange>
                <goals>
                    <goal>compress</goal>
                    <goal>jslint</goal>
                </goals>
            </pluginExecutionFilter>
            <action>
                <ignore/>
            </action>
        </pluginExecution>
    </pluginExecutions>
</lifecycleMappingMetadata>

4) En caso de que no le guste ninguna de estas 3 opciones, puede usar un conector m2e (extensión) para el complemento maven. El conector a su vez proporcionará los metadatos a m2e. Puede ver un ejemplo de la información de metadatos dentro de un conector en este enlace . Es posible que haya notado que los metadatos se refieren a un configurador. Esto simplemente significa que m2e delegará la responsabilidad a esa clase particular de Java suministrada por el autor de la extensión. El configurador puede configurar el proyecto (como agregar carpetas de origen adicionales, etc.) y decidir si ejecutar el complemento real de Maven durante una compilación incremental (si no se gestiona correctamente dentro del configurador, puede conducir a infinitas construcciones de proyectos)

Consulte estos enlaces para ver un ejemplo de la configuración ( enlace1 , enlace2 ). Entonces, en caso de que el complemento sea algo que se pueda administrar a través de un conector externo, puede instalarlo. m2e mantiene una lista de dichos conectores aportados por otros desarrolladores. Esto se conoce como el catálogo de descubrimiento. m2e le pedirá que instale un conector si aún no tiene metadatos de mapeo del ciclo de vida para la ejecución a través de cualquiera de las opciones (1-6) y el catálogo de descubrimiento tiene alguna extensión que puede administrar la ejecución.

La imagen siguiente muestra cómo m2e le solicita que instale el conector para el complemento build-helper-maven. instale el conector sugerido del catálogo de descubrimiento.

5) m2e alienta a los autores de complementos a admitir la creación incremental y el suministro del mapeo del ciclo de vida dentro del complemento maven mismo. Esto significaría que los usuarios no tendrán que usar mapeos o conectores adicionales del ciclo de vida. Algunos autores de complementos ya lo han implementado

6) Por defecto, m2e contiene los metadatos de mapeo del ciclo de vida para la mayoría de los complementos de uso común, como el complemento compilador maven y muchos otros.

Ahora volvamos a la pregunta: probablemente pueda proporcionar una asignación de ignorar el ciclo de vida en 1, 2 o 3 para ese objetivo específico que le está creando problemas.

coderplus
fuente
14

Una buena solución para recordarle que m2e podría configurarse mejor, sin que el proyecto herede un marcador de error falso positivo, es degradar esos errores a advertencias:

Ventana -> Preferencias -> Maven -> Errores / Advertencias -> La ejecución del complemento no está cubierta por la configuración del ciclo de vida = Advertencia

mgobeil
fuente
12

Traté de ejecutar una conexión específica justo después de la limpieza, es decir, después de la limpieza (el valor predeterminado es la fase de limpieza). Esto funcionó para mí con eclipse indigo. Recién agregado después de la limpieza resolvió el problema para mí.

<executions>
  <execution>
    <configuration>
    </configuration>
   <phase>post-clean</phase>
    <goals>
      <goal>update-widgetset</goal>
    </goals>
  </execution>
</executions> 
Charith De Silva
fuente
11
¿Podría explicar por qué eso funciona? "Recién agregado" y "resuelto por mí" en realidad no aumenta mi confianza en que no tenga comportamientos ocultos no deseados.
Kissaki
Efectivamente, tengo una phasey una goalpara el executionpom.xml que me dieron, y todavía recibo el error.
reinierpost
Caballeros, mis disculpas. No soy un experto experto, quería ayudar a algunos en busca de una solución rápida. Sin embargo, debería haber dado más información. Creo que el truco aquí es la inclusión de la fase de ejecución. Como mojo puede definir con fases de ejecución, traté de ejecutar una conexión específica justo después de la limpieza, es decir, después de la limpieza (el valor predeterminado es la fase de limpieza). Esto funcionó para mí con eclipse indigo. ¿Probablemente el complemento específico puede haber usado algunas dependencias del pom principal? IIRC este fue un complemento basado en Vaadin.
Charith De Silva
2

Pude resolver el mismo problema con maven-antrun-plugin y jaxb2-maven-plugin en Eclipse Kepler 4.3 aplicando esta solución: http://wiki.eclipse.org/M2E_plugin_execution_not_covered#Eclipse_4.2_add_default_mapping
Así que el contenido de mi% elipse_workspace_name% /. metadata / .plugins / org.eclipse.m2e.core / lifecycle-mapping-metadata.xml es el siguiente:

<?xml version="1.0" encoding="UTF-8"?>
<lifecycleMappingMetadata>
  <pluginExecutions>
    <pluginExecution>
      <pluginExecutionFilter>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-antrun-plugin</artifactId>
        <versionRange>1.3</versionRange>
        <goals>
          <goal>run</goal>
        </goals>
      </pluginExecutionFilter>
      <action>
        <ignore />
      </action>
    </pluginExecution>
    <pluginExecution>
      <pluginExecutionFilter>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>jaxb2-maven-plugin</artifactId>
        <versionRange>1.2</versionRange>
        <goals>
          <goal>xjc</goal>
        </goals>
      </pluginExecutionFilter>
      <action>
        <ignore />
      </action>
    </pluginExecution>
  </pluginExecutions>
</lifecycleMappingMetadata>

* Tuve que reiniciar Eclipse para ver los errores desaparecidos.

Eros
fuente
1

A partir de Maven Eclipse (m2e) versión 0.12, todos los objetivos del ciclo de vida de Maven deben correlacionarse con una extensión m2e instalada. En este caso, maven-ear-plugintenía un objetivo sin asignar default-generate-application-xml.

Puede excluir objetivos de ciclo de vida no asignados simplemente siguiendo las instrucciones aquí:

https://wiki.eclipse.org/M2E_plugin_execution_not_covered

Alternativamente, simplemente haga clic derecho en el mensaje de error en Eclipse y elija Quick Fix-> Ignore for every pom with such errors.

Debe tener cuidado al ignorar los objetivos del ciclo de vida: por lo general, los objetivos hacen algo útil y si los configura para que se ignoren en Eclipse, puede perder pasos importantes de compilación. También es posible que desee considerar agregar soporte a la extensión EAR de Eclipse de Maven para el objetivo del ciclo de vida no asignado.

Ricardo Gladwell
fuente
0

Con el mecanismo explicado en la respuesta de Jan, he ordenado al plugin m2e que ignore el objetivo "generate-application-xml". Esto elimina el error y parece funcionar ya que m2e crea application.xml.

Básicamente, el error nos obligó a decidir qué mecanismo se encarga de generar application.xml cuando la compilación de Maven se ejecuta dentro de Eclipse bajo el control del complemento m2e. Y hemos decidido que m2e está a cargo.

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-ear-plugin</artifactId>
            <version>2.6</version>
            <configuration>
                <version>6</version>
                <defaultLibBundleDir>lib</defaultLibBundleDir>
            </configuration>
        </plugin>
    </plugins>
    <pluginManagement>
        <plugins>
            **<!-- This plugin's configuration is used to store Eclipse m2e settings 
                only. It has no influence on the Maven build itself. -->
            <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-ear-plugin</artifactId>
                                    <versionRange>[2.1,)</versionRange>
                                    <goals>
                                        <goal>generate-application-xml</goal>
                                    </goals>
                                </pluginExecutionFilter>
                                <action>
                                    <ignore></ignore>
                                </action>
                            </pluginExecution>
                        </pluginExecutions>
                    </lifecycleMappingMetadata>
                </configuration>
            </plugin>**
        </plugins>
    </pluginManagement>
</build>
StaticNoiseLog
fuente
0

Debe comprender el contenido en M2E_plugin_execution_not_covered y seguir los pasos mencionados a continuación:

  • Elija org.eclipse.m2e.lifecyclemapping.defaults jar de la carpeta del complemento eclipse
  • Extraiga y abra lifecycle-mapping-metadata.xml donde puede encontrar todos los complementos.
  • Agregue el complemento Ejecuciones de sus complementos que se muestran como errores con etiquetas <ignore/>inferiores <action>.

por ejemplo: para error de propiedades de proyecto de escritura, agregue este fragmento en la <pluginExecutions>sección del archivo lifecycle-mapping-metadata.xml:

 <pluginExecution>
    <pluginExecutionFilter>
       <groupId>org.codehaus.mojo</groupId>
       <artifactId>properties-maven-plugin</artifactId>
       <versionRange>1.0-alpha-2</versionRange>
       <goals>
         <goal>write-project-properties</goal>
       </goals>
    </pluginExecutionFilter>
     <action>
       <ignore />
     </action>
   </pluginExecution>
  • Reemplace ese archivo XML en el JAR
  • Reemplace el JAR actualizado en la carpeta de complementos de Eclipse
  • Reiniciar Eclipse

No debería ver errores en el futuro para ningún proyecto.

Gowtham
fuente
0

Aunque la pregunta es demasiado antigua, me gustaría compartir la solución que funcionó para mí porque ya verifiqué todo cuando se trata de este error. Fue un dolor, pasé dos días intentándolo y al final la solución fue:

actualizar el complemento M2e en eclipse

limpiar y construir de nuevo

William Kinaan
fuente