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)
- archivo pom.xml del proyecto
- padre, abuelo, etc., archivos pom.xml
- [m2e 1.2+] preferencias de espacio de trabajo
- Extensiones m2e instaladas
- [m2e 1.1+] metadatos de mapeo del ciclo de vida proporcionados por el complemento maven
- 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 jslint
y compress
del 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 jslint
y compress
del 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.
.
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.