O Eclipse tem o conceito de compilações incrementais, o que é incrivelmente útil, pois economiza muito tempo.
Como isso é útil
Digamos que você acabou de alterar um único arquivo .java. Os construtores incrementais poderão compilar o código sem precisar recompilar tudo (o que levará mais tempo).
Agora, qual é o problema com os plug-ins do Maven
A maioria dos plugins maven não é projetada para compilações incrementais e, portanto, cria problemas para o m2e. O m2e não sabe se o objetivo do plugin é algo crucial ou irrelevante. Se ele apenas executar todos os plug-ins quando um único arquivo for alterado, levará muito tempo.
Essa é a razão pela qual o m2e depende de informações de metadados para descobrir como a execução deve ser tratada. O m2e criou opções diferentes para fornecer essas informações de metadados e a ordem de preferência é a seguinte (do maior para o menor)
- arquivo pom.xml do projeto
- arquivos pai, avô e assim por diante pom.xml
- Preferências do espaço de trabalho [m2e 1.2+]
- extensões m2e instaladas
- [m2e 1.1+] metadados de mapeamento do ciclo de vida fornecidos pelo plugin maven
- metadados de mapeamento de ciclo de vida padrão enviados com m2e
1,2 refere-se à especificação da seção pluginManagement na tag do seu arquivo pom ou de qualquer um dos pais. O M2E lê essa configuração para configurar o projeto. O snippet abaixo instrui o m2e a ignorar os objetivos jslint
e compress
do 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) Caso você não prefira poluir seu arquivo pom com esses metadados, você pode armazená-lo em um arquivo XML externo (opção 3). Abaixo está um arquivo de mapeamento de amostra que instrui o m2e a ignorar os objetivos jslint
e compress
do 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) Caso não goste de nenhuma dessas três opções, você pode usar um conector m2e (extensão) para o plug-in maven. O conector, por sua vez, fornecerá os metadados para m2e. Você pode ver um exemplo das informações de metadados em um conector neste link . Você deve ter notado que os metadados se referem a um configurador. Isso significa simplesmente que o m2e delegará a responsabilidade para essa classe java específica fornecida pelo autor da extensão. O configurador pode configurar o projeto (como, por exemplo, adicionar pastas de origem adicionais, etc.) e decidir se deve executar o plugin real do maven durante uma construção incremental (se não gerenciado adequadamente dentro do configurador, pode levar a inúmeras compilações de projetos)
Consulte esses links para obter um exemplo do configurador ( link1 , link2 ). Portanto, caso o plug-in seja algo que possa ser gerenciado através de um conector externo, você poderá instalá-lo. O m2e mantém uma lista desses conectores contribuídos por outros desenvolvedores. Isso é conhecido como catálogo de descoberta. O m2e solicitará que você instale um conector se você ainda não possui nenhum metadado de mapeamento do ciclo de vida para a execução através de qualquer uma das opções (1-6) e o catálogo de descoberta possui alguma extensão que pode gerenciar a execução.
A imagem abaixo mostra como o m2e solicita que você instale o conector para o plugin build-helper-maven-plugin.
.
5) M2e encoraja os autores de plugins para suportar compilação incremental e mapeamento do ciclo de vida de alimentação dentro dos itself.This-plugin Maven significaria que os usuários não terão que usar os mapeamentos de ciclo de vida adicionais ou connectors.Some plugin de autores já implementado este
6) Por padrão, o m2e mantém os metadados de mapeamento do ciclo de vida da maioria dos plug-ins comumente usados, como o maven-compiler-plugin e muitos outros.
Agora, de volta à pergunta: você provavelmente pode apenas fornecer um mapeamento de ciclo de vida ignorado em 1, 2 ou 3 para o objetivo específico que está criando problemas para você.