Execução de plug-in não coberta pela configuração do ciclo de vida (arquétipo do JBossas 7 EAR)


123

Estou usando o Eclipse 3.7 Indigo com o Maven M2E Plugin 1.0.100.

Usando o arquétipo JBoss 7.x JavaEE 6 EAR, o pom para EAR está me dando este erro:

Execução de plug-in não coberta pela configuração do ciclo de vida: org.apache.maven.plugins: maven-ear-plugin: 2.6: generate-application-xml (execução: default-generate-application-xml, fase: 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>

Respostas:


138

Este é um "recurso" do plugin M2E que foi introduzido há um tempo atrás. Não está diretamente relacionado ao plug-in JBoss EAR, mas também acontece com a maioria dos outros plug-ins do Maven.

Se você tiver uma execução de plug-in definida em pom(como a execução de maven-ear-plugin:generate-application-xml), você também precisará adicionar informações adicionais de configuração para o M2E que digam ao M2E o que fazer quando a construção for executada no Eclipse, por exemplo, se a execução do plug-in for ignorada ou executada por M2E, isso também deve ser feito para compilações incrementais, ... Se essas informações estiverem ausentes, o M2E reclamará disso, mostrando esta mensagem de erro:

"Execução de plug-in não coberta pela configuração do ciclo de vida"

Veja aqui uma explicação mais detalhada e algumas configurações de amostra que precisam ser adicionadas ao pom para que esse erro ocorra:

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


70
@ Jan Eu não entendo o conceito. O M2E deve ser transparente para o usuário. Faça o que a linha de comando Maven faz, mas de dentro do eclipse. Não deve haver nos dados de configuração do pom para dizer ao M2E o que fazer. Se isso acontecer, é um design ruim. BTW, esses erros às vezes desaparecem nas versões mais recentes do Eclipse e do M2E.
— extasiada

8
Eu concordo com extasiado. Meu POM não depende de m2e e eu gostaria de adicionar um agora apenas porque estou usando o Eclipse como meu IDE. Isso é importante para outras pessoas que trabalham no mesmo projeto que pode estar usando outro IDE, como o IntelliJ. Se o m2e precisar dessas dicas, ele deverá fazer parte da configuração do m2e no Eclipse.
— William

12
Alguns objetivos não fazem sentido enquanto estiver no Eclipse. Por exemplo, tenho projetos em que os arquivos ZIP são descompactados para a targetpasta. Você não gostaria que isso fosse repetido "de forma incremental" ao salvar cada arquivo de origem. Ou talvez você não quer isso. Realmente, o m2e não tem idéia sobre sua compilação específica. É possível armazenar o que o m2e deve fazer no Eclipse, POM ou, possivelmente, instalar um conector do m2e que inclua mais conhecimento no m2e para lidar com a etapa de construção. Estas são as opções que você deve ver. Entendo que você não quer deixar seu POM m2e ciente, mas é um bom lugar para configurar isso centralmente para todos os seus desenvolvedores.
— Sander Verhagen

3
O problema é que a documentação vinculada para isso, como a maioria da documentação no Maven ou Eclipse. é abcacadabra. Por mais que tentem explicar claramente, a explicação se baseia em muitos conceitos que eu, como usuário relativamente novo do Maven, não entendo e não sei como procurar - tudo o que acho tem o mesmo problema: muitos inexplicáveis conceitos. A tecnologia é muito complexa ou a documentação é muito mal organizada. De qualquer forma, a curva de aprendizado é alta. As respostas aqui acrescentam muita clareza.
— reinierpost

10
@RicardoGladwell Você entendeu mal o objetivo dos votos negativos. A seta diz "esta resposta não é útil" - e isso não é verdade. Portanto, mesmo que você não goste do tom com o qual esta resposta está escrita, o voto negativo foi desnecessário.
— Dawood ibn Kareem

43

mesmo assim, é tarde demais, mas minha solução foi simples, clique com o botão direito do mouse na mensagem de erro no Eclipse e escolha Quick Fix >> Ignore para cada pom com esses erros


3
Não é tão tarde. Eu apenas resolvi o problema dessa maneira!
— reinierpost

2
Eu também. Toda essa pesquisa e tentando entender qual era o problema me deu dor de cabeça, então eu a ignorei :) Obrigado.
— dleerob

1
Isso funcionou para mim. Eu suspeito que ele gera automaticamente o que é descrito pela resposta de @ Jan que aponta para eclipse.org/m2e/documentation/m2e-execution-not-covered.html porque a única alteração que vi depois que aceitei a solução rápida foi uma alteração no meu pom. xml.
— Michael Osofsky

Tentei novamente em outra máquina e o problema desapareceu quando atualizei do JBehave 3.9.4 para 3.9.5, pois era o plugin JBehave, no meu caso, que estava criando o erro (eu gerara a configuração do plug-in a partir de um arquétipo do JBehave Maven ( jbehave.org/reference/stable/archetypes.html ))
— Michael Osofsky

30

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)

  1. arquivo pom.xml do projeto
  2. arquivos pai, avô e assim por diante pom.xml
  3. Preferências do espaço de trabalho [m2e 1.2+]
  4. extensões m2e instaladas
  5. [m2e 1.1+] metadados de mapeamento do ciclo de vida fornecidos pelo plugin maven
  6. 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 jslinte compressdo 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 jslinte compressdo 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. conector de instalação sugerido no catálogo de descoberta.

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


14

Uma boa solução para lembrá-lo de que o m2e poderia ser melhor configurado, sem o projeto herdar um marcador de erro falso positivo, é apenas fazer o downgrade desses erros para avisos:

Janela -> Preferências -> Maven -> Erros / Avisos -> Execução de plug-in não coberta pela configuração do ciclo de vida = Aviso


12

Tentei executar o plugging específico logo após a limpeza, ou seja, pós-limpeza (o padrão é fase limpa). Isso funcionou para mim com o eclipse indigo. Acabei de adicionar o pós-limpeza resolvido o problema para mim.

<executions>
  <execution>
    <configuration>
    </configuration>
   <phase>post-clean</phase>
    <goals>
      <goal>update-widgetset</goal>
    </goals>
  </execution>
</executions> 

11
Você poderia explicar por que isso funciona? "Acabou de adicionar" e "resolvido para mim" não aumenta realmente minha confiança em não ter comportamentos ocultos indesejados.
— Kissaki

Com certeza, eu tenho um phasee um goalpara o executionpom.xml que me foi fornecido e ainda recebo o erro.
— reinierpost

Senhores - minhas desculpas. Eu não sou um especialista experiente, queria ajudar alguém1 em busca de uma solução rápida. Eu deveria ter dado mais informações, no entanto. Eu acho que o truque aqui é a inclusão da fase de execução. Como o mojo pode definir com as fases de execução, tentei executar o plugging específico logo após a limpeza, ou seja, pós-limpeza (o padrão é a fase limpa). Isso funcionou para mim com o eclipse indigo. Provavelmente plugin específico pode ter usado algumas dependências do pom principal? IIRC este foi o plugin baseado em Vaadin.
— Charith De Silva

2

Consegui resolver o mesmo problema com o maven-antrun-plugin e o jaxb2-maven-plugin no Eclipse Kepler 4.3, aplicando esta solução: http://wiki.eclipse.org/M2E_plugin_execution_not_covered#Eclipse_4.2_add_default_mapping
Portanto, o conteúdo do meu% elipse_workspace_name% /. metadata / .plugins / org.eclipse.m2e.core / lifecycle-mapping-metadata.xml é o seguinte:

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

* Teve que reiniciar o Eclipse para ver os erros desaparecidos.


1

No Maven Eclipse (m2e) versão 0.12, todos os objetivos do ciclo de vida do Maven devem mapear para uma extensão m2e instalada. Nesse caso, o maven-ear-pluginobjetivo era não mapeado default-generate-application-xml.

Você pode excluir metas de ciclo de vida não mapeadas simplesmente seguindo as instruções aqui:

https://wiki.eclipse.org/M2E_plugin_execution_not_covered

Como alternativa, basta clicar com o botão direito do mouse na mensagem de erro no Eclipse e escolher Quick Fix-> Ignore for every pom with such errors.

Você deve ter cuidado ao ignorar os objetivos do ciclo de vida: normalmente, os objetivos fazem algo útil e, se você os configurar para serem ignorados no Eclipse, poderá perder etapas importantes de construção. Você também pode considerar adicionar suporte à extensão EAR do Maven Eclipse para o objetivo do ciclo de vida não mapeado.


0

Com o mecanismo explicado na resposta de Jan, instruí o plug-in m2e a ignorar o objetivo "generate-application-xml". Isso elimina o erro e parece funcionar, pois o m2e cria o application.xml.

Então, basicamente, o erro nos forçou a decidir qual mecanismo é responsável pela geração do application.xml quando a compilação do Maven é executada no Eclipse sob o controle do plugin m2e. E nós decidimos que m2e está no comando.

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

0

Você precisa entender o conteúdo em M2E_plugin_execution_not_covered e seguir as etapas mencionadas abaixo:

  • Escolha o jar org.eclipse.m2e.lifecyclemapping.defaults na pasta do plugin do eclipse
  • Extraia-o e abra o lifecycle-mapping-metadata.xml onde você pode encontrar todas as execuções de plugins.
  • Adicione o pluginExecutions dos seus plugins, que são mostrados como erros com as tags <ignore/>under <action>.

por exemplo: para erro de gravação-projeto-propriedades, inclua esse trecho na <pluginExecutions>seção do arquivo 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>
  • Substitua esse arquivo XML no JAR
  • Substitua o JAR atualizado na pasta de plug-in do Eclipse
  • Reinicie o Eclipse

Você não verá erros no futuro para nenhum projeto.


0

Embora a pergunta seja muito antiga, eu gostaria de compartilhar a solução que funcionou para mim porque já verifiquei tudo quando se trata desse erro. Foi uma dor, passei dois dias tentando e no final a solução foi:

atualize o plugin M2e no eclipse

limpe e construa novamente

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.